我正在创建C#应用程序,我在winform dataGridView中从数据库加载数据。我有10秒间隔的计时器。我正在通过计时器刷新gridView。我想要的是当gridView再次加载数据时,它将新数据加载到第二个网格中。我想在第二个网格中新行。
我做了什么
我正在尝试计算gridView行,然后计算刷新数据后加载的数据集中的新行。如果数据集中有其他行,我想在新网格中使用这些行。
请帮助我或建议我如何申请循环
for (int i = gridRows; i < dataSetRows; i++)
{
drForSMS["USERID"] = ds.Tables[0].Rows[0][0].ToString();
drForSMS["NAME"] = dataSetForDefautLoad.Tables[0].Rows[0][0].ToString();
}
答案 0 :(得分:0)
我认为更明确的方法是清除所有行,然后将网格绑定到新(刷新的)数据集。
首次打开应用程序时,将第一个网格绑定到DataSet
,将第二个网格绑定到null
。将第一个dataset
保留在本地collection variable
。
在计时器事件中,将数据集加载到某个集合中并执行绑定。
List<int> list1 = new List<int>();
list1.Add(1);
list1.Add(2);
// Now this is your refresh which will load all data from first load, plus the refresh load
List<int> list2 = new List<int>();
list2 = list1;
list2.Add(3);
list2.Add(4);
list2.Add(5);
// Now you want the new values only in list2
// Like we said, keep the original list1 in local variable so you can do this
foreach (var l in list1)
{
if (list2.Contains(l))
list2.Remove(l);
}
然后只需将第二个网格绑定到null
,然后绑定到list2
。
2。 另一种方法是: 运行应用程序时,保留第一个查询的计数。例如,你有5条记录。 然后对于第二个网格,您从5及以上循环以加载第二个网格。
DataSet dsFirst = new DataSet(); DataSet dsNew = new DataSet();
var rows = dsFirst.Tables[0].Rows;
var newRows = dsNew.Tables[0].Rows;
// Choose your collection type here...
var forBinding = new List<object>();
for (int i = rows.Count - 1; i < newRows.Count; i++)
{
forBinding.Add(newRows[i]);
}
dataGrid.DataSource = forBinding;
DataSet
DataSet dsFirst = new DataSet(); var initialCount = dsFirst.Tables [0] .Rows.Count;
DataSet dsRefreshed = new DataSet();
for (int i = 0; i < initialCount; i++)
{
dsRefreshed.Tables[0].Rows.RemoveAt(i);
}
dg.DataSource = dsRefreshed;
只需询问您是否需要根据代码进行调整。