【问题标题】:Infragistics WebDataGrid get value from a selected row by column name: VB.net to C# conversionInfragistics WebDataGrid 按列名从选定行中获取值:VB.net 到 C# 的转换
【发布时间】:2012-12-20 15:01:42
【问题描述】:

我正在将带有 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"] 部分。

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

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

【问题讨论】:

标签: c# infragistics vb.net-to-c#


【解决方案1】:

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

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
}

【讨论】:

    【解决方案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 之间的转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多