私は C# でこれに対する解決策をたくさん見つけましたが、FindControls を扱っていて GridView から値を取り出そうとすると、C# は役に立たず、変換されたコードは機能しません。
私はこのグリッドビューを持っています:
<asp:GridView ID="WIPListGrid" runat="server" DataSourceID="WIPDataSource"
CssClass="site" AutoGenerateColumns="False"
Width="95%" DataKeyNames="Masterid_Action" onrowdatabound="WIPListGrid_RowDataBound">
<Columns>
<asp:BoundField DataField="Action Due Date" HeaderText="Action Due Date"
SortExpression="Action Due Date" />
</Columns>
</asp:GridView>
そして私はvbでこれを持っています:
Dim DueDate As Label = DirectCast(e.Row.FindControl("Action Due Date"), Label)
'do what ever you want to do here using the value of your label
MsgBox("Due Date = " & DirectCast(e.Row.FindControl("Action Due Date"), Label))
End Sub
エラー メッセージは Operator & is not defined for types 'String' および 'System.Web.UI.WebControls.Label' です
これは、私が本当にやりたいことの改善例です。上記では、DueDate に含まれているものを表示して、その形式を確認し、他の値に対してテストできるようにしたいだけです。しかし、うまくいきません。Action Due Date の内容は文字列ではないようです...では、何が欠けていますか?
値を文字列に等しく設定しようとしましたが、同じ問題が発生しました。ラベルは文字列ではありません...
それを評価するためにそこにあるものをどのように見つけますか?
2013 年 1 月 17 日編集: まだ問題が解決されていないため、これをアクティブに保ちます。
2013 年 1 月 18 日編集: vb.net コードは現在
Protected Sub WIPListGrid_ROWDataBound(sender as Object,
e As System.Web.UI.Webcontrols.GridViewRowEventArgs) Handles WIPListGrid.RowDataBound
Dim DueDate As Label = DirectCast(e.Row.FindControl("Action Due Date"), Label)
'do what ever you want to do here using the value of your label
MsgBox("Due Date = " & DueDate.Text)
End Sub
しかし、オブジェクトがインスタンス化されておらず、コード内の msgbox 行を指しているというエラーが表示されます。ラベルとして暗くするとインスタンス化したと思いました...
正式なエラーは、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」です。
トラブルシューティングのヒントは、1) 「new」キーワードを使用してオブジェクト インスタンスを作成する、2) メソッドを呼び出す前にオブジェクトが null かどうかを確認する
「新しい」オプションを試してみたところ、変数が既に宣言されているというエラーが表示されました。そのため、オブジェクトが null であり、その方法を理解できないかどうかを確認したいと考えています。
テストを試みました: DirectCast(e.Row.FindControl("action due date"), Label) <> "" しかし、エラーが発生しました: アクセス可能な '<>' をこれらの引数で呼び出すことができないため、オーバーロードの解決に失敗しました。
オブジェクトが null かどうかをテストするにはどうすればよいですか?
値はnullであってはなりません(データベースはnullにすることを許可していません)が、これが私の問題の核心になる可能性があります...
何か助けはありますか?