我从一位前同事手中接过了一个项目,我试图从一个从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正在查找数据并返回数据,但不是以任何有用的方式。
我做错了什么?
答案 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,我只是将其转换为我知道如何使用的数组。