从DetailsView获取BoundField的值

Ray*_*Ray 3 c# asp.net detailsview boundfield

我似乎总是对此有问题。我在视图外部有一个按钮,它调用需要一个的函数OrderNumber。我不断出错

ArgumentOutOfRangeException was unhandled by user code
Run Code Online (Sandbox Code Playgroud)

在调试模式下,或者在浏览器中,

Specified argument was out of the range of valid values.
Run Code Online (Sandbox Code Playgroud)

这就是我访问它的方式:

string sOrderNumber = (Order_DetailsView.Rows[0].Cells[0].Controls[0] as TextBox).Text;
int orderNumber = Int32.Parse(sOrderNumber);
Run Code Online (Sandbox Code Playgroud)

我也尝试过((TextBox)Order_DetailsView.Rows[0].Cells[0].Controls[0]).Text索引的所有组合Rows[i].Cells[i].Controls[i],我可以理解。

这是DetailsView:

<asp:DetailsView ID="Order_DetailsView" runat="server" AutoGenerateRows="False">
    <Fields>
        <asp:BoundField DataField="OrderNumber" HeaderText="Order #" />
        <asp:BoundField DataField="GST" HeaderText="GST" DataFormatString="{0:c}" />
        <asp:BoundField DataField="Total" HeaderText="Total" DataFormatString="{0:c}" />
    </Fields>
</asp:DetailsView>
Run Code Online (Sandbox Code Playgroud)

我只是做错了吗?我已经查看了所有可以找到的示例,并且我的代码看起来合法。我觉得我必须忽略一些简单的事情。

Vis*_*har 5

应该有一个TemplateField如下:

<asp:DetailsView ID="Order_DetailsView" runat="server" AutoGenerateRows="False">
<Fields>
    <asp:BoundField DataField="OrderNumber" HeaderText="Order #" />
    <asp:BoundField DataField="GST" HeaderText="GST" DataFormatString="{0:c}" />
    <asp:BoundField DataField="Total" HeaderText="Total" DataFormatString="{0:c}" />
    <asp:TemplateField HeaderText="Order Number">                
        <ItemTemplate>
            <asp:TextBox ID="txtOrderNo" runat="server" Text='<%# Bind("OrderNumber") %>'></asp:TextBox>
        </ItemTemplate>                    
    </asp:TemplateField>
</Fields>
</asp:DetailsView>
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过以下方式访问它:

string sOrderNumber = ((TextBox)Order_DetailsView.Rows[0].Cells[0].FindControl("txtOrderNo")).Text;
Run Code Online (Sandbox Code Playgroud)

为了获得BoundField价值,您可以这样:

protected void Order_DetailsView_DataBound(object sender, EventArgs e)
{
    string MyOrderNumber = Order_DetailsView.Rows[0].Cells[0].Text;
}
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案,但有人在您之前发布了帖子。不过谢谢! (2认同)