1

我正在将带有 VB.NET 代码隐藏的网站转换为 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

我认为将其更改为这个几乎可以做到,但无济于事。

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

具体来说,我得到的错误是,Cannot apply indexing with [] to an expression of type 'object'我非常肯定的是指的是该DataItem["Status"]部分。

如何从名称指定的列的选定行中获取值?

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

4

2 回答 2

3

我在这里找到了一个可行的解决方案,但感觉相当迂回。

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
}
于 2012-12-20T15:43:37.633 回答
2

您的 C# 行中缺少的只是将 this.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,因此不需要显式完成 Object 和 DataRowView 之间的转换。

于 2012-12-27T22:04:37.037 回答