如何从使用存储过程的数据表填充listview

iyfjxgzm  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(259)

我从一个以前的同事那里接管了一个项目,我正在尝试从一个从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;
    }

这是我用来填充listview的内容:

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正在查找数据并返回数据,但不是以任何有用的方式。
我做错什么了?

h43kikqp

h43kikqp1#

这就是我想到的,我还在学习,解决我的问题。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,所以我把它放到了一个我知道如何使用的数组中。

相关问题