3

我在我的 Windows 应用程序中使用了一个 ultragrid,通过将它的 DataSource 属性设置为从该表返回的数据表来显示我的数据库表的记录。

行数可以是大约 100000 行。

现在我有两个问题:

1)我想让用户选择这个网格的几行,然后全部编辑它们。要做到这一点,我需要知道这些选定行的哪些单元格具有相同的值,哪些没有,然后在一个中显示相同的列形式。

我想到的第一个解决方案是通过 2 个 foreach 循环检查所有选定行的所有列。有没有更好的解决方案?

2)最后当用户按下保存按钮时,更新应该应用在表上。什么是最好的方法?(使用INsqldataadapter 的 command 或 UpdateCommand 或 ...)

4

3 回答 3

3

您可以使用 UltraGrid 提供的方法调用 UpdateData() 来更新所有多行,而无需逐行或逐单元跟踪更改

UpdateData 方法更新网格中的任何修改信息,并将其发送给数据提供者。更新完成后,任何标记为已修改数据的行都将清除该标记。

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

于 2012-07-19T12:59:24.390 回答
3

根据我的分析,

1)您可以根据要查看和保存数据的所有列在超网格中进行分组。将相似的列分组后会出现在一起,这将节省大量的数据分析时间,并找出不同行中哪些列数据相同。一旦获得了类似数据的列表,您就可以通过 for each 循环甚至 for 循环轻松处理它们,因为您将能够访问由此生成的行数。

2)您应该考虑为此使用 System.Data.SqlClient.SqlBulkCopy。这是文档,当然还有很多在线教程。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx 没有时应该避免 IN。的记录更多,因为它会影响性能。如果你不想使用sqlbulkcopy,那么你也可以去ultragrid的UpdateData()(ultragrid的非常有用的特性)

于 2012-07-20T03:33:56.120 回答
0

对于我的第一个问题,我找不到任何解决方案,因此我使用循环来比较网格中所有选定的行并诊断常见值。但我在第二个问题中使用了 SqlBulkCopy。

于 2012-07-31T04:55:51.673 回答