在DataTable中检索数据时出现异常:期望索引的键的值为2,但接收到的值为1

时间:2014-01-27 08:48:58

标签: c# asp.net gridview datatable

我有这个GridView来显示数据。

<dx:ASPxGridView ID="ASPxGridView1" runat="server" KeyFieldName="Line1;Line2" OnRowUpdating="ASPxGridView1_RowUpdating">
    <Columns>
        <dx:GridViewDataTextColumn Caption="Line1" FieldName="Line1" Name="col_Line1" ReadOnly="True" VisibleIndex="1">
        </dx:GridViewDataTextColumn>
        <dx:GridViewDataTextColumn Caption="Line2" FieldName="Line2" Name="col_Line2" ReadOnly="True" VisibleIndex="2">
        </dx:GridViewDataTextColumn>
        <dx:GridViewDataTextColumn Caption="Text" FieldName="Text" Name="col_Text" VisibleIndex="3">
        </dx:GridViewDataTextColumn>
    </Columns>
</dx:ASPxGridView>

假设我有一个存储数据源的DataTable。 DataTable具有关于密钥的以下设置。

DataColumn[] key = new DataColumn[2];
key[0] = DT.Columns["Line1"];
key[1] = DT.Columns["Line2"];
DT.PrimaryKey = key;

当我尝试使用ASPxDataUpdatingEventArgs e在GridView更新事件中查找记录时

DataRow row = DT.Rows.Find(e.Keys);

我把错误作为标题。有没有错误的设置? 如果有任何其他示例代码需要参考,请告诉我。

2 个答案:

答案 0 :(得分:1)

谢谢@Arpit。 使用以下代码解决了该问题。

object[] keys = new object[2];
keys[0] = e.Keys[0];
keys[1] = e.Keys[1];

DataRow row = dt.Rows.Find(keys);

答案 1 :(得分:0)

这是一些次要代码,可从您希望分配主键的数据表中生成这些代码:

// C#
var pKeys = new DataColumn[2]; // array
pKeys[0] = dt.Columns[dt.Columns.IndexOf("<first column name goes here>")]; // column 0-based of the table of interest
// if multi-part
pKeys[1] = dt.Columns[dt.Columns.IndexOf("<second column name goes here>")]; // column 0-based of the table of interest
...
...
dt.PrimaryKey = pKeys;