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中有这个: 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 = " & DirectCast(e.Row.FindControl("Action Due Date"), Label))



End Sub

错误消息是 Operator & 没有为类型 'String' 和 'System.Web.UI.WebControls.Label' 定义

这是我~真的~想做的一个补救例子。上面我只想显示 DueDate 中包含的内容以查看它的格式,以便我可以根据其他值对其进行测试。但它不会工作。看来 Action Due Date 的内容不是字符串......那么,我错过了什么?

我试图将值设置为等于字符串但遇到了同样的问题,标签不是字符串...

我如何找出里面有什么来评估它?

17/01/2013 编辑:保持此活动状态,因为我的问题仍未解决。

18/01/2013 编辑: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

但是现在我收到一个错误,即 Object 未实例化并且它指向代码中的 msgbox 行。我以为我在将它调暗为标签时实例化了它......

官方错误是:“对象引用未设置为对象的实例。”

故障排除提示说: 1)使用“new”关键字创建对象实例 2)在调用方法之前检查确定对象是否为空

我尝试了“新”选项并得到一个错误,表明该变量已被声明。所以现在我想检查以确定对象是否为空并且无法弄清楚如何。

我尝试过测试: DirectCast(e.Row.FindControl("action due date"), Label) <> "" 但出现错误:重载解析失败,因为无法使用这些参数调用可访问的 '<>'。

如何测试对象是否为空?

该值不应该为空(数据库不允许它为空),但这可能是我问题的症结所在......

有什么帮助吗?

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>

对于您的 Row 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 回答