2012-07-27 57 views
0

当用户在编辑模板中更改文本框中的文本并单击更新时,当我尝试抓取这些新值时,它仍然在为文本框的旧值加分。从代码背后更新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"); 
    } 

的响应,显示我被抓住的价值仍然是盒子的origonal文本值。不是你在盒子里输入的内容。

+1

你在哪里绑定GridView?您可能希望确保在“if(!IsPostBack){}”内部执行此操作,因为编辑命令可能会触发回传,从而将网格重新绑定为其原始值。 – 2012-07-27 19:48:12

+0

该问题看起来像您还将编辑项目模板列与数据表中的数据绑定在一起,并且当您在代码中获取代码中的数据时没有获得用户在编辑模式下更新的更新数据,并且仍然获取旧数据。 – 2012-07-27 19:55:52

+0

运行您的代码而不绑定编辑项目模板字段并检查您的代码是否有效。 – 2012-07-27 19:59:56

回答

0

我想通了,德里克说得对。它必须处理页面加载中的回发中的绑定数据。我每次都会绑定数据,而不是第一次。谢谢

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.

+0

仍然做同样的事情,即使当我没有绑定到编辑模板 – mwhite14 2012-07-27 20:09:58

+0

你是否添加了这种编码if(e.RowState == DataControlRowState。编辑)'? – 2012-07-27 20:10:40

+0

idk为什么但它不让我打电话给e.Row。我正在使用以下系统 - 使用系统; using System.Collections.Generic;使用System.Linq的 ; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Data; using System.Data.Common; using System.Text.RegularExpressions; – mwhite14 2012-07-27 20:14:02