0

私は 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にすることを許可していません)が、これが私の問題の核心になる可能性があります...

何か助けはありますか?

4

2 に答える 2

1

コントロールを操作するときは、コントロール内にその値が必要であることを指摘する必要があります。

あなたの場合は、(内部のテキストではなく)ラベルコントロール自体を使用するだけです。

例えば:

Dim myControl As Label = DirectCast(e.Row.FindControl("myControl"), Label)

MsgBox("MyText = " & myControl.Text)

お役に立てれば。

于 2013-01-16T12:55:26.013 に答える
0

問題は、BoundField を使用しているため、見つけるコントロールがないことです。テンプレートフィールドに変更すると、これが機能します。

<asp:GridView ID="WIPListGrid" runat="server" DataSourceID="WIPDataSource" 
CssClass="site" AutoGenerateColumns="False" 
Width="95%" DataKeyNames="Masterid_Action" onrowdatabound="WIPListGrid_RowDataBound">
<Columns>
            <asp:TemplateField HeaderText="Action Due Date">
                <ItemTemplate>
                    <asp:Label ID="lblActionDueDate" runat="server" Text='<%# Bind("[Action Due Date]") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
</Columns>
</asp:GridView>

あなたの行のDataBoundイベントの使用のために

Dim DueDateLabel As Label = DirectCast(e.Row.FindControl("lblActionDueDate"), Label)
'Check Label Exists
If DueDateLabel IsNot Nothing Then
    Dim DueDateText As String = DueDateLabel.Text
    MsgBox(String.Format("Due Date {0}", DueDateText))
End If
于 2013-01-17T22:46:40.163 に答える