Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在代码隐藏中从GridView访问选定的Boundfield值_C#_Asp.net_Gridview_Code Behind_Readonly - Fatal编程技术网

C# 如何在代码隐藏中从GridView访问选定的Boundfield值

C# 如何在代码隐藏中从GridView访问选定的Boundfield值,c#,asp.net,gridview,code-behind,readonly,C#,Asp.net,Gridview,Code Behind,Readonly,我见过类似的问题,但没有一个答案能帮助我解决这个问题。 我有GridView和一个只读字段,如下所示 GridView: <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataKeyNames="projectID" DataSourceID="SqlDataSource1"

我见过类似的问题,但没有一个答案能帮助我解决这个问题。 我有GridView和一个只读字段,如下所示

GridView:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
              AutoGenerateColumns="False" DataKeyNames="projectID" 
              DataSourceID="SqlDataSource1" 
              EmptyDataText="There are no data records to display." 
              PageSize="5" OnRowUpdating="GridView1_RowUpdating">
  <Columns>
    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True"/>
    <asp:BoundField DataField="prID" HeaderText="prID" SortExpression="prID"/>
    <asp:BoundField DataField="projectName" HeaderText="projectName" 
                    SortExpression="projectName" />
    <asp:BoundField DataField="projectType" HeaderText="projectType" 
                    SortExpression="projectType" />
  </Columns>
  <EditRowStyle CssClass="GridViewEditRow"/>
</asp:GridView>
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{

    GridViewRow row = GridView1.Rows[e.RowIndex];

    String d1 = ((TextBox)(row.Cells[2].Controls[0])).Text;
    String d2 = ((TextBox)(row.Cells[3].Controls[0])).Text;

    // this only works while the field is not readonly      
    string prIDUpdate = ((TextBox)(row.Cells[1].Controls[0])).Text; 

}
注意:我尝试过使用
GridView1.DataKeys[e.RowIndex]
onRowDataBound
设置BoundField,但我无法得到结果


提前谢谢

我看到您在GridView控件中的DataKeyNames设置如下

DataKeyNames="projectID"
那么我猜你的键名是projectID,而不是prID,不是吗? 如果是这样,您可以获取所选行的数据,如下所示:

string id = GridView1.DataKeys[e.RowIndex]["projectID"].ToString();
您还应添加此列:

<asp:BoundField DataField="projectID" HeaderText="prID" SortExpression="projectID"/>
如果这没用,很抱歉

<Columns>
            <asp:TemplateField HeaderText="prID" SortExpression="prID">
                <ItemTemplate>
                    <asp:Label ID="lblPrId" runat="server" Text='<%# Bind("prID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="projectName" HeaderText="projectName" 
                    SortExpression="projectName" />
            <asp:BoundField DataField="projectType" HeaderText="projectType" 
                    SortExpression="projectType" />
  </Columns>
Label lblPrId = row.FindControl("lblPrId") as Label;    
string prId = lblPrId .Text;