我在我的Windows应用程序中使用了一个ultragrid来显示我的数据库表的记录,方法是将其DataSource属性设置为从该表返回的数据表。
行数可以是大约100000行。
现在我有两个问题:
1)我想让用户选择这个网格的几行,然后全部编辑它们。为此,我需要知道这些选定行的哪些单元格具有相同的值,哪些单元格没有,然后显示相同的表格中的列。
我想到的第一个解决方案是通过2个foreach循环检查所有选定行的所有列。是否有更好的解决方案?
2)最后当用户按下保存按钮时,更新应该应用于表。这是最好的方法吗? (使用IN
命令或sqldataadapter的UpdateCommand或...)
答案 0 :(得分:3)
您可以使用UltraGrid提供的方法调用UpdateData()来更新所有多行,而无需逐行或按单元跟踪更改
UpdateData method更新网格中的所有已修改信息,并将其发送给数据提供者。更新完成后,任何标记为已修改数据的行都将清除该标记。
UpdateMethod需要从仍处于编辑模式的单元格退出,这是一个错误,要解决它,您需要使用它,如下所示
ultraGrid1.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.ExitEditMode); ultraGrid1.UpdateData();
可以在http://devcenter.infragistics.com/Support/KnowledgeBaseArticle.Aspx?ArticleID=4220
找到有关使用这种方式的原因的详细信息要回答第二个问题,您必须以这种方式使用UpdateData方法
e.g.
private void ultraButton1_Click(object sender, EventArgs e)
{
ultraGrid1.UpdateData();
this.dbRowsTableAdapter.Update(this.testDataSet);
ultraButton1.Enabled = false;
}
同样,UltraGrid似乎将其本地数据保持为纯自身,因此您必须调用TableAdapter的Update方法,这意味着您必须创建一个DataSet并使用SqlDataAdapter填充它。
请参阅论坛,清楚解释为什么UltraGrid.UpdateData方法不会在此处提交回数据库http://www.infragistics.com/community/forums/t/57161.aspx
答案 1 :(得分:3)
根据我的分析,
1)您可以在超级网格中进行分组,根据您要查看的所有列并保存数据。分组后,相似的列将一起出现,这将节省大量的数据分析时间,并确定哪些列数据在不同的行中相同。获得类似数据列表后,您可以轻松地为每个循环或甚至循环处理它们,因为您可以访问由此生成的行数。
2)你应该看一下使用System.Data.SqlClient.SqlBulkCopy。这是文档,当然还有很多在线教程 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx 没有时,应该避免使用IN。记录更多因为它影响性能。如果您不想使用sqlbulkcopy,那么您也可以使用ultragrid的UpdateData()(超网格的非常有用的功能)
答案 2 :(得分:0)
我找不到第一个问题的任何解决方案,所以我使用循环来比较网格的所有选定行并诊断常用值。 但我已经使用SqlBulkCopy作为我的第二个问题。