Infragistics WebDataGrid按列名从选定行获取值:VB.net到C#转换

Infragistics WebDataGrid按列名从选定行获取值:VB.net到C#转换,c#,infragistics,vb.net-to-c#,C#,Infragistics,Vb.net To C#,我正在将VB.NET中带有codebehind的网站转换为C#。我遇到的唯一真正的问题是在RowSelectionChanged事件中按列名从Infragistics WebDataGrid中获取数据 VB.NET代码示例: If Me.WebDataGrid1.Behaviors.Selection.SelectedRows(0).DataItem("Status").ToString <> "Released" Then '"Status" is the colu

我正在将VB.NET中带有codebehind的网站转换为C#。我遇到的唯一真正的问题是在
RowSelectionChanged
事件中按列名从Infragistics WebDataGrid中获取数据

VB.NET代码示例:

If Me.WebDataGrid1.Behaviors.Selection.SelectedRows(0).DataItem("Status").ToString <> "Released" Then
        '"Status" is the column name
End If
具体地说,我得到的错误是,
无法将带[]的索引应用于“object”类型的表达式
,我很肯定这是指
数据项[“Status”]
部分

对于名称指定的列,如何从所选行获取值


更新:我在下面的答案中找到了一个解决方案,但可能做得更好。如果有更好的答案,我很乐意接受不同的答案。

我找到了一个可行的解决方案,但感觉有些迂回

GridRecord selectedRow = e.CurrentSelectedRows[0];
DataRowView dataItem = (DataRowView)selectedRow.DataItem;
DataRow dataRow = dataItem.Row;
object[] valueArray = dataRow.ItemArray;
int columnIndex = WebDataGrid1.Columns["Status"].Index;
string statusValue = selectedRow.Items[columnIndex].Value.ToString();

if (statusValue != "Released") {
    //do stuff
}

我找到了一个可行的解决方案,但感觉有些迂回

GridRecord selectedRow = e.CurrentSelectedRows[0];
DataRowView dataItem = (DataRowView)selectedRow.DataItem;
DataRow dataRow = dataItem.Row;
object[] valueArray = dataRow.ItemArray;
int columnIndex = WebDataGrid1.Columns["Status"].Index;
string statusValue = selectedRow.Items[columnIndex].Value.ToString();

if (statusValue != "Released") {
    //do stuff
}

您的C#行中缺少的全部内容都是此.WebDataGrid1.Behaviors.Selection.SelectedRows[0].DataItem到DataRowView的转换。例如,以下方法可行:

if (((DataRowView)this.WebDataGrid1.Behaviors.Selection.SelectedRows[0].DataItem)["Status"].ToString() != "Released")
{
        //do stuff
}
请注意,以下内容可能更容易阅读:

DataRowView drv = (DataRowView) this.WebDataGrid1.Behaviors.Selection.SelectedRows[0].DataItem;
if (drv["Status"].ToString() != "Released")
{
    //do stuff
}

我假设您正在转换的VB代码工作正常,因为没有设置Option Strict,所以不需要显式地完成对象和DataRowView之间的转换。

您的C行中缺少的所有内容都是针对这个问题的转换。WebDataGrid1.Behaviors.Selection.SelectedRows[0]。DataItem到DataRowView。例如,以下方法可行:

if (((DataRowView)this.WebDataGrid1.Behaviors.Selection.SelectedRows[0].DataItem)["Status"].ToString() != "Released")
{
        //do stuff
}
请注意,以下内容可能更容易阅读:

DataRowView drv = (DataRowView) this.WebDataGrid1.Behaviors.Selection.SelectedRows[0].DataItem;
if (drv["Status"].ToString() != "Released")
{
    //do stuff
}

我假设您正在转换的VB代码能够正常工作,因为没有设置选项Strict,所以不需要显式地完成Object和DataRowView之间的转换。

在他们的文档中,他们使用的是Items而不是DataItem:我试着看看有什么区别,但是在他们的网页上使用搜索引发了一个异常。在他们的文档中,他们使用的是Items而不是DataItem:我试图看看有什么不同,但是在他们的网页上使用搜索引发了一个异常。