1

VB.NET のコード ビハインドを含む Web サイトを 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
}

Option Strict が設定されておらず、Object と DataRowView の間の変換を明示的に行う必要がなかったため、変換元の VB コードが機能したと想定しています。

于 2012-12-27T22:04:37.037 に答える