Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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行_C#_Asp.net_Datagrid_Code Behind - Fatal编程技术网

C# 从代码隐藏更新GridView行

C# 从代码隐藏更新GridView行,c#,asp.net,datagrid,code-behind,C#,Asp.net,Datagrid,Code Behind,当用户在编辑模板中更改文本框中的文本并单击“更新”时,当我尝试获取这些新值时,它仍然在雕刻文本框的旧值 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CompanyID" CellPadding="4" GridLines="None" Width="1079px" ForeColor="#333333" On

当用户在编辑模板中更改文本框中的文本并单击“更新”时,当我尝试获取这些新值时,它仍然在雕刻文本框的旧值

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="CompanyID" CellPadding="4"  
        GridLines="None" Width="1079px" ForeColor="#333333" 
        OnRowCancelingEdit="GridView1_RowCancelling"
        OnRowUpdating="GridView1_RowUpdating"
        OnRowEditing="GridView1_RowEditing">


        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        <Columns>
            <asp:TemplateField ShowHeader="False">

                <EditItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" 
                        CommandName="Update" CommandArgument='<%# Eval("CompanyID") %>' Text="Update"></asp:LinkButton>
                    &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" 
                        CommandName="Cancel" Text="Cancel"></asp:LinkButton>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" 
                        CommandName="Edit" Text="Edit" ></asp:LinkButton>
                </ItemTemplate>


            </asp:TemplateField>



            <asp:TemplateField HeaderText="Issue Date">

                <ItemTemplate>
                    <asp:Label runat="server" ID="IssueDate" Text='<%#Eval("IssueDate") %>' />                    
                </ItemTemplate>

                <EditItemTemplate>
                    <asp:TextBox runat="server" ID="txtIssueDate" Text='<%#Eval("IssueDate") %>' />
                </EditItemTemplate>

            </asp:TemplateField>


            <asp:TemplateField HeaderText="Notice Intent Response Due">

                <ItemTemplate>
                    <asp:Label runat="server" ID="NoticeIntentResponseDue" Text='<%#Eval("NoticeIntentResponseDue") %>' />                    
                </ItemTemplate>

                <EditItemTemplate>
                    <asp:TextBox runat="server" ID="txtNoticeIntentResponseDue" Text='<%#Eval("NoticeIntentResponseDue") %>' />
                </EditItemTemplate>

            </asp:TemplateField>


            <asp:TemplateField HeaderText="Deadline For Questions">

                <ItemTemplate>
                    <asp:Label runat="server" ID="DeadlineForQuestions" Text='<%#Eval("DeadlineForQuestions") %>' />                    
                </ItemTemplate>

                <EditItemTemplate>
                    <asp:TextBox runat="server" ID="txtDeadlineForQuestions" Text='<%#Eval("DeadlineForQuestions") %>' />
                </EditItemTemplate>

            </asp:TemplateField>


            <asp:TemplateField HeaderText="Bids Due">

                <ItemTemplate>
                    <asp:Label runat="server" ID="BidsDue" Text='<%#Eval("BidsDue") %>' />                    
                </ItemTemplate>

                <EditItemTemplate>
                    <asp:TextBox runat="server" ID="txtBidsDue" Text='<%#Eval("BidsDue") %>' />
                </EditItemTemplate>

            </asp:TemplateField>


            <asp:TemplateField HeaderText="Shortlist Notice">

                <ItemTemplate>
                    <asp:Label runat="server" ID="ShortlistNotice" Text='<%#Eval("ShortlistNotice") %>' />                    
                </ItemTemplate>

                <EditItemTemplate>
                    <asp:TextBox runat="server" ID="txtShortlistNotice" Text='<%#Eval("ShortlistNotice") %>' />
                </EditItemTemplate>

            </asp:TemplateField>


            <asp:TemplateField HeaderText="Final Selection">

                <ItemTemplate>
                    <asp:Label runat="server" ID="FinalSelection" Text='<%#Eval("FinalSelection") %>' />                    
                </ItemTemplate>

                <EditItemTemplate>
                    <asp:TextBox runat="server" ID="txtFinalSelection" Text='<%#Eval("FinalSelection") %>' />
                </EditItemTemplate>

            </asp:TemplateField>





            <asp:TemplateField Visible="false" HeaderText="CompanyID">

                <ItemTemplate>
                    <asp:Label runat="server" ID="CompanyID" Text='<%#Eval("CompanyID") %>' />
                </ItemTemplate>

            </asp:TemplateField>




        </Columns>



    </asp:GridView>

响应向我显示,被抓取的值仍然是框的原始文本值。不是您在框中键入的内容。

在网格视图行更新事件中添加以下条件

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
 if (e.Row.RowState == DataControlRowState.Edit )
 {


    int key = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value);

    Label CompanyID = (Label)GridView1.Rows[e.RowIndex].FindControl("txtCompanyID");

    TextBox thisIssueDate = (TextBox)(GridView1.Rows[e.RowIndex].FindControl("txtIssueDate"));

    TextBox NoticeIntentResponseDue = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtNoticeIntentResponseDue");

    Response.Write(NoticeIntentResponseDue.Text + " " + thisIssueDate.Text);
    Response.End();

    TextBox DeadlineForQuestions = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtDeadlineForQuestions");

    TextBox BidsDue = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtBidsDue");

    TextBox ShortlistNotice = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtShortlistNotice");

    TextBox FinalSelection = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtFinalSelection");
    }  
  }
更新:
问题似乎是您还将编辑项模板列与数据表中的数据绑定在一起,当您在代码中获取数据时,您没有获取用户在编辑模式下更新的更新数据,而您仍然获取旧数据<代码>如果您从编辑项模板feilds中删除绑定,那么您的代码将正常工作。

我想出来了,Derek是对的。这与页面加载中回发时的绑定数据有关。我每次都绑定数据,而不是第一次。谢谢

您在哪里绑定GridView?您可能需要确保在
if(!IsPostBack){}
中执行此操作,因为编辑命令可能会触发回发,从而将网格重新绑定到其原始值。问题似乎是您还使用数据表中的数据绑定了编辑项模板列,当您在代码中获取数据时,您将无法获取用户在编辑模式下更新的更新数据,而您仍将获取旧数据。在不绑定编辑项模板字段的情况下运行代码,并检查代码是否正常工作。即使我没有绑定到编辑模板,仍然执行相同的操作即使我没有绑定到编辑模板,仍然执行相同的操作当我没有绑定到编辑模板时,如果(e.Row.RowState==DataControlRowState.edit),您是否添加此密码?idk为什么,但它不允许我调用e.Row。我使用以下系统-使用系统;使用System.Collections.Generic;使用System.Linq;使用System.Web;使用System.Web.UI;使用System.Web.UI.WebControl;使用System.Data.SqlClient;使用系统数据;使用System.Data.Common;使用System.Text.RegularExpressions;尝试此操作将此事件添加到您的页面
受保护的无效GridView1_RowEditing(对象发送者,GridViewEditEventArgs e){//设置编辑索引。TaskGridView.EditIndex=e.NewEditIndex;BindData();//绑定您的网格视图}
尝试此操作以获取textbox`textbox t=(textbox)(row.Cells[1]。控件[0])的引用;或文本框t=(文本框)(行。单元格[1]。控件[1]);`对于所有控件
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
 if (e.Row.RowState == DataControlRowState.Edit )
 {


    int key = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value);

    Label CompanyID = (Label)GridView1.Rows[e.RowIndex].FindControl("txtCompanyID");

    TextBox thisIssueDate = (TextBox)(GridView1.Rows[e.RowIndex].FindControl("txtIssueDate"));

    TextBox NoticeIntentResponseDue = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtNoticeIntentResponseDue");

    Response.Write(NoticeIntentResponseDue.Text + " " + thisIssueDate.Text);
    Response.End();

    TextBox DeadlineForQuestions = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtDeadlineForQuestions");

    TextBox BidsDue = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtBidsDue");

    TextBox ShortlistNotice = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtShortlistNotice");

    TextBox FinalSelection = (TextBox)GridView1.Rows[e.RowIndex].FindControl("txtFinalSelection");
    }  
  }