0

ユーザーが編集テンプレートのテキストボックスのテキストを変更して更新をクリックすると、それらの新しい値を取得しようとすると、テキストボックスの古い値が引き続き使用されます。

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

応答は、取得されている値がまだボックスの元のテキスト値であることを示しています。ボックスに入力したものではありません。

4

2 に答える 2

0

グリッド ビューの行更新イベントで、次の条件を追加します。

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.

于 2012-07-27T19:46:45.070 に答える
0

私はそれを理解しました、デレクは正しかったです。ページ読み込み中のポストバックのバインディング データに関係していました。初めてではなく、毎回データをバインドしました。ありがとう

于 2012-07-31T21:42:17.203 に答える