【问题标题】:How to populate a listview from a datatable that is using stored procedures如何从使用存储过程的数据表中填充列表视图
【发布时间】:2016-10-05 19:08:25
【问题描述】:

我从一位前同事那里接手了一个项目,我正在尝试从一个从 mysql 数据库中提取的数据表中填充一个列表视图。

这是我用来从 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 查找数据并返回数据,但没有任何用处。

我做错了什么?

【问题讨论】:

  • 但没有任何用处是什么意思?
  • 它将 2 个零加载到单个列中,就是这样。该表此时输入了几个字符串和日期。
  • 当您使用正确的工具完成工作时,生活会更简单,使用数据表作为 DateGridView 的数据源。一种类似代码,无需复制数据
  • @ChrisIverson,您可以手动编码并填充 DataTable _DT - GetDataSPT3 的输出吗?并通过ListView显示你想要的显示?这可能使我能够帮助你。我怀疑对于添加子项,for 循环应该是for (int i = 1; i &lt; row.Table.Columns.Count; i++)。这是因为 row[0] - 第一列被添加为项目;因此,SubItems 表示同一行的另一列。
  • @Rupesh,这就是我最终解决的方法。

标签: c# mysql winforms listview


【解决方案1】:

这是我想出的,我还在学习,以解决我的问题。 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,我只是将它滚动到一个我知道如何使用的数组中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多