我正在创建C#应用程序,其中我正在用winform dataGridView从数据库中加载数据。我有10秒的计时器间隔。我正在用计时器刷新gridView。我想要的是,当gridView再次加载数据时,它会将新数据加载到第二个网格中。我要第二个网格中的新行。
我做了什么,
我正在尝试计算gridView行,然后在刷新数据后加载的dataset中计数新行。如果dataset中还有其他行,我希望这些行位于新的网格中。
请帮助我或建议我如何应用循环。
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();
}发布于 2016-12-09 13:46:06
我认为更明确的方法是清除所有行,然后将网格绑定到新(刷新)数据集。
第一次打开应用程序时,将第一个网格绑定到DataSet,将第二个网格绑定到null。将第一个dataset保存在本地的collection variable中。
在timer事件中,将数据集加载到某些集合并执行绑定。
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。
DataSet dsFirst =新DataSet();DataSet dsNew =新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 =新DataSet();var initialCount = dsFirst.Tables.Rows.Count;
DataSet dsRefreshed =新的DataSet();for (int i= 0;i< initialCount;i++) { dsRefreshed.Tables.Rows.RemoveAt(i);} dg.DataSource = dsRefreshed;只需询问是否需要将其调整为代码即可。
https://stackoverflow.com/questions/41061818
复制相似问题