C# 修改数据表 情况:

C# 修改数据表 情况:,c#,wpf,datagrid,datatable,wpftoolkit,C#,Wpf,Datagrid,Datatable,Wpftoolkit,你好!!我试图用MS Access数据库填充WPF工具包DataGrid 以下是我现在拥有的(它有效): 上面的代码示例在MS Access数据库的帮助下加载WPF工具包DataGrid 我想做的是能够在一开始就在DataGrid中插入一列。此列将用于写入行号。我认为可以修改表变量(这是一个数据表对象) 问题: 那么,如何在表变量中插入一列,为新列中的每一行添加行号,并将数据库中的所有数据放入DataGrid?最简单的解决方案是修改代码,在原始SELECT查询中包含一个“虚拟”行号字段,如下所

你好!!我试图用MS Access数据库填充WPF工具包DataGrid

以下是我现在拥有的(它有效):

上面的代码示例在MS Access数据库的帮助下加载WPF工具包DataGrid

我想做的是能够在一开始就在DataGrid中插入一列。此列将用于写入行号。我认为可以修改变量(这是一个数据表对象)


问题:
那么,如何在表变量中插入一列,为新列中的每一行添加行号,并将数据库中的所有数据放入DataGrid?

最简单的解决方案是修改代码,在原始SELECT查询中包含一个“虚拟”行号字段,如下所示:

SELECT ROWNUM AS ROWNUMBER, * FROM TABLE1
不幸的是,Access没有类似ROWNUM函数的功能,因此我认为最简单的解决方案是在SELECT查询中添加一个RowNumber列,如下所示:

SELECT 0 AS ROWNUMBER, * FROM TABLE1
int rownumber = 1;
foreach (DataRow row in table.Rows)
{
    row["ROWNUMBER"] = rownumber;
    rownumber++;
}
它将在开始处添加一个包含所有零的列,然后遍历生成的DataTable并设置行号,如下所示:

SELECT 0 AS ROWNUMBER, * FROM TABLE1
int rownumber = 1;
foreach (DataRow row in table.Rows)
{
    row["ROWNUMBER"] = rownumber;
    rownumber++;
}

然后将数据表转储到网格中。

另一种方法是在数据表上创建一列,然后再将IDataReader加载到其中


// the rest of your code
//
DataTable table = new DataTable();
DataColumn col = table.Columns.Add("RowNumber", typeof(int));
col.AutoIncrementSeed = 1;
col.AutoIncrement = true;

//
// the rest of your code
//

table.Load(reader)
//
// the rest of your code
下面的代码片段从问题的上下文中演示了该技术


好主意。也许我看到的datatable太复杂了……我最初打算建议在代码中创建ROWNUMBER DataColumn并执行相同的操作,但似乎没有一种简单的方法可以将DataColumn插入datatable的Columns集合中的特定位置(与只调用Add相反,Add将其放在末尾)。我已经尝试了几个小时,通过复制DataTable的列和行来插入列,但没有效果。您的解决方案似乎已经基本实现,但我遇到一个异常,告诉我“ROWNUMBER”是只读的…列是只读的不是我所期望的-我想我从来没有在SQL Server或Oracle源的虚拟列中遇到过这种情况,所以我猜这是MS Access数据适配器的副产品。这方面做得很好。从读卡器加载不会删除表中的任何现有列?如果不是,那么urs是更好的解决方案。您可以通过以下代码片段亲自查看:DataTable table=new DataTable();DataColumn Coll=table.Columns.Add(“RowNumber”,typeof(int));col.AutoIncrementSeed=1;col.AutoIncrement=true;DataTable origin=new DataTable();DataColumnCollection Columns=origin.Columns;Columns.Add(“Id”,typeof(int));columns.Add(“Name”,typeof(string));origin.Rows.Add(55,“Foo”);origin.Rows.Add(14,“Bar”);table.Load(origin.CreateDataReader();//通过调试器检查表。Is将包含“origin”的内容和列“RowNumber”prepend.Oooops…我是新来的,不知道注释中的代码会变得不匹配。代码通过DataTable.CreateDataReader创建另一个表来模拟IDataReader,并将此读取器加载到目标DataTable中。实际上,与其他建议的解决方案相比,它涉及的代码更少。我返回到我的原始答案since MusiGenesis的编辑包括我在评论中添加的示例代码,其唯一目的是向他演示它是如何工作的。如果你们认为演示是有效的,请随意添加示例代码(或要求我这样做)但是要明确的是,它只演示了概念,而不是Partial问题中的代码所需要的。你可以把它放回去。它是绝对相关的!