正在从代码隐藏更新GridView行



当用户在编辑模板中更改文本框中的文本并单击更新时,当我试图获取这些新值时,它仍然保留文本框的旧值。

<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)
    {
        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");
    }  

响应向我显示,所获取的值仍然是框的原始文本值。不是你在方框里键入的内容。

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

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");
    }  
  }

更新:问题似乎是,您还将"编辑项"模板列与数据表中的数据绑定,并且当您在代码后面获取数据时,您没有获得用户在编辑模式下更新的更新数据,而您仍在获取旧数据。If you remove the Binding from the Edit Item Template feilds then your code will work.

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

最新更新