如何从使用存储过程的数据表填充列表视图

时间:2016-10-05 19:08:25

标签: c# mysql winforms listview

我从一位前同事手中接过了一个项目,我试图从一个从mysql数据库中提取的数据表中填充一个listview。

以下是我从MySQL中提取的内容:

 internal static DataTable GetDataSPT3(string StoredProcedure, Dictionary<string, string> Parameters)
    {
        DataTable _DT = new DataTable();
        MySqlCommand cmd = new MySqlCommand(StoredProcedure, new MySqlConnection(Creds.GetConnectionStringT3()));
        cmd.CommandType = CommandType.StoredProcedure;
        foreach (KeyValuePair<string, string> Parameter in Parameters)
            cmd.Parameters.Add(new MySqlParameter(Parameter.Key, Parameter.Value));
        cmd.Connection.Open();
        MySqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        _DT.Load(dr);
        dr.Close();
        return _DT;
    }

这是我用来填充列表视图的内容:

         private void GetMetrics()
    {
        string begin = "2015-05-26 00:00:00";
        string end = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        Dictionary<string, string> Parameters = GetParameters();
        Parameters.Add("p_daily_metrics_date_Date1", begin);
        Parameters.Add("p_daily_metrics_date_Date2", end);
        DataTable dt = new DataTable();
        foreach (DataRow row in RRCStoredProcedures.GetDataSPT3("spGetDailyMetrics", Parameters).Rows)
        {
            ListViewItem item = new ListViewItem(row[0].ToString());
            for (int i = 0; i < row.Table.Rows.Count;i++)
            {
                item.SubItems.Add(row[i].ToString());
            }
            lvMetrics.Items.Add(item);
        }
    }

观察进程是否与断点一起工作,SQL正在查找数据并返回数据,但不是以任何有用的方式。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这是我想出来的,我还在学习,解决我的问题。 DatagridView对我来说不起作用,因为它在加载时触发了selectionchanged事件,并且由于我不能拥有该表单的需要。

我的解决方案:

 private void GetMetrics()
    {
        string[] array = new string[11];
        string begin = "2015-05-26 00:00:00";
        string end = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        Dictionary<string, string> Parameters = GetParameters();
        Parameters.Add("p_daily_metrics_date_Date1", begin);
        Parameters.Add("p_daily_metrics_date_Date2", end);
        foreach (DataRow row in (RRCStoredProcedures.GetDataSPT4("spGetDailyMetrics", Parameters)).Rows)
        {
            for (int item = 0; item < row.ItemArray.Count(); item++)
            {
                array[item] = row.ItemArray[item].ToString();
            }

            ListViewItem thing = new ListViewItem
                (new[] { array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7], array[8], array[9], array[10] });
            Metricslstvw.Items.Insert(0, thing);
            Array.Clear(array, 0, 10);
        }
        foreach(ColumnHeader ch in Metricslstvw.Columns) { ch.Width = -2; }


    }

由于DataRow公开了ItemArray,我只是将其转换为我知道如何使用的数组。