2014-05-12 57 views
0

我有一個gridview,可以在footertemplate中添加工作正常的行。我想將RowEditing和RowDeleting添加到網格中。 我添加了RowEditing方法,但是當我點擊'編輯'按鈕時,添加行顯示在頁腳中,就像它是「添加行」命令一樣 當我創建一個網格原型時,當你點擊按鈕時,行會改變,這樣所有的字段都是可編輯的,當字段是ItemTemplate字段時,我該怎麼做?RowEditing命令沒有觸發

這是我的標記:

<asp:GridView ID="MappingGridView" runat="server" AllowSorting="True" AutoGenerateColumns="False" Caption="Enrollment Mapping Information" CaptionAlign="Top" 
    CssClass="grid" HorizontalAlign="Left" ShowFooter="True" AllowPaging="True" PageSize="4" ShowHeaderWhenEmpty="true" OnPageIndexChanging="MappingGridView_PageIndexChanging" 
    OnRowDataBound="MappingGridView_RowDataBound" OnRowCommand="MappingGridView_RowCommand" Width="1051px" OnRowEditing="MappingGridView_RowEditing"> 
    <Columns> 
     <asp:TemplateField HeaderText="MappingID" SortExpression="mgvMappingID"> 
      <ItemTemplate> 
       <asp:Label ID="mgvLblMappingID" runat="server" Text='<%# Bind("EnrollmentMappingID") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="SectionID"> 
      <EditItemTemplate> 
       <asp:TextBox ID="mgvDdlSectionID" runat="server" Text='<%# Bind("SectionID") %>'></asp:TextBox> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="mgvLblSectionID" runat="server" Text='<%# Bind("SectionID") %>'></asp:Label> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:TextBox ID="mgvInsertSectionID" runat="server" ReadOnly="true" Text="" Width="90%"></asp:TextBox> 
      </FooterTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="SchoologyCourseID" SortExpression="mgvSchoologyCourseID"> 
      <EditItemTemplate> 
       <asp:TextBox ID="mgvEditSchoologyCourseID" runat="server" Text='<%# Bind("SchoologyCourseID") %>'></asp:TextBox> 
       <asp:RequiredFieldValidator ID="ReqFieldValEditSchoologyCourseID" ControlToValidate="mgvEditSchoologyCourseID" runat="server" 
        ErrorMessage="Required field." ValidationGroup="MappingGrid" Display="Dynamic" 
        CssClass="message-error"> 
       </asp:RequiredFieldValidator> 
       <asp:RegularExpressionValidator ID="RegExpValEditSchoologyCourseID" ControlToValidate="mgvEditSchoologyCourseID" runat="server" 
        ErrorMessage="Enter only integers." ValidationGroup="MappingGrid" ValidationExpression="^\d+$" 
        Display="Dynamic" CssClass="message-error"> 
       </asp:RegularExpressionValidator> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="mgvLblSchoologyCourseID" runat="server" Text='<%# Bind("SchoologyCourseID") %>'></asp:Label> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:TextBox ID="mgvInsertSchoologyCourseID" runat="server" Width="90%"></asp:TextBox> 
       <asp:RequiredFieldValidator ID="ReqFieldValSchoologyCourseID" ControlToValidate="mgvInsertSchoologyCourseID" runat="server" 
        ErrorMessage="Required field." ValidationGroup="MappingGrid" Display="Dynamic" 
        CssClass="message-error"> 
       </asp:RequiredFieldValidator> 
       <asp:RegularExpressionValidator ID="RegExpValSchoologyCourseID" ControlToValidate="mgvInsertSchoologyCourseID" runat="server" 
        ErrorMessage="Enter only integers." ValidationGroup="MappingGrid" ValidationExpression="^\d+$" 
        Display="Dynamic" CssClass="message-error"> 
       </asp:RegularExpressionValidator> 
      </FooterTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="CECityActivityID" SortExpression="mgvCECityActivityID"> 
      <EditItemTemplate> 
       <asp:TextBox ID="mgvEditCECityActivityID" runat="server" Text='<%# Bind("CECityActivityID") %>'></asp:TextBox> 
       <asp:RegularExpressionValidator ID="RegExpValEditCECityID" ControlToValidate="mgvEditCECityActivityID" runat="server" 
        ErrorMessage="Enter 0-9, A-F, and hyphens. Maximum length is 50." ValidationGroup="MappingGrid" ValidationExpression="^[0-9A-Fa-f-]{0,50}$" 
        Display="Dynamic" CssClass="message-error"> 
       </asp:RegularExpressionValidator> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="mgvLblCECityActivityID" runat="server" Text='<%# Bind("CECityActivityID") %>'></asp:Label> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:TextBox ID="mgvInsertCECityActivityID" runat="server" Width="90%"></asp:TextBox> 
       <asp:RegularExpressionValidator ID="RegExpValCECityID" ControlToValidate="mgvInsertCECityActivityID" runat="server" 
        ErrorMessage="Enter only 0-9, A-F, and hyphens; maximum length is 50." ValidationGroup="MappingGrid" ValidationExpression="^[0-9A-Fa-f-]{0,50}$" 
        Display="Dynamic" CssClass="message-error"> 
       </asp:RegularExpressionValidator> 
      </FooterTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Is Active" SortExpression="mgvIsActive"> 
      <EditItemTemplate> 
       <asp:DropDownList ID="mgvEditIsActive" runat="server" Text='<%# Bind("IsActive") %>'> 
        <asp:ListItem>Yes</asp:ListItem> 
        <asp:ListItem>No</asp:ListItem> 
       </asp:DropDownList>     
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="mgvLblIsActive" runat="server" Text='<%# Bind("IsActive") %>'></asp:Label> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:DropDownList ID="mgvInsertIsActive" runat="server" Width="90%"> 
        <asp:ListItem Selected="True">Yes</asp:ListItem> 
        <asp:ListItem>No</asp:ListItem> 
       </asp:DropDownList> 
      </FooterTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Max. Enrollment"> 
      <EditItemTemplate> 
       <asp:TextBox ID="mgvEditMaxEnrollment" runat="server" Text='<%# Bind("MaxEnrollment") %>'></asp:TextBox> 
       <asp:RegularExpressionValidator ID="RegExpValEditMaxEnroll" ControlToValidate="mgvEditMaxEnrollment" runat="server" 
        ErrorMessage="Enter only integers." ValidationGroup="MappingGrid" ValidationExpression="^\d+$" 
        Display="Dynamic" CssClass="message-error"> 
       </asp:RegularExpressionValidator> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="mgvLblMaxEnrollment" runat="server" Text='<%# Bind("MaxEnrollment") %>'></asp:Label> 
      </ItemTemplate> 
      <FooterTemplate> 
       <asp:TextBox ID="mgvInsertMaxEnrollment" runat="server" Width="90%"></asp:TextBox> 
       <asp:RegularExpressionValidator ID="RegExpValMaxEnroll" ControlToValidate="mgvInsertMaxEnrollment" runat="server" 
        ErrorMessage="Enter only integers." ValidationGroup="MappingGrid" ValidationExpression="^\d+$" 
        Display="Dynamic" CssClass="message-error"> 
       </asp:RegularExpressionValidator> 
      </FooterTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Action" ShowHeader="False"> 
      <EditItemTemplate> 
       <asp:Button ID="mgvImgUpdate" runat="server" CausesValidation="True" CommandName="Update" Text="Update"></asp:Button> 
       &nbsp;<asp:Button ID="mgvImgCancel" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel"></asp:Button> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Button ID="mgvEditButton" runat="server" CausesValidation="True" ValidationGroup="MappingGrid" CommandName="Edit" Text="Edit" Width="40%"></asp:Button> 
       <asp:Button ID="mgvDeleteButton" runat="server" CausesValidation="false" CommandName="Delete" Text="Delete" Width="40%"></asp:Button> 
      </ItemTemplate> 
      <ItemStyle HorizontalAlign="Center" /> 
      <FooterTemplate> 
       <asp:Button ID="mgvBtnAdd" runat="server" CommandName="Add" Text="Add Mapping" Width="90%" CausesValidation="true" ValidationGroup="MappingGrid" /> 
      </FooterTemplate> 
     </asp:TemplateField> 
    </Columns> 
    <EmptyDataTemplate> 
     <tr> 
      <td colspan="11" style="text-align:center;"> 
       No mapping data was found for this section. Mappings can be added to this section by clicking the 'Add Mapping' Button. 
      </td> 
     </tr> 
     <tr> 
      <td></td> 
      <td><asp:TextBox ID="mgvInsertSectionID" runat="server" ReadOnly="true" Width="90%"></asp:TextBox></td> 
      <td><asp:TextBox ID="mgvInsertSchoologyCourseID" runat="server" Width="90%"></asp:TextBox> 
       <asp:RequiredFieldValidator ID="ReqFieldValSchoologyCourseIDEmpty" ControlToValidate="mgvInsertSchoologyCourseID" runat="server" 
        ErrorMessage="Required field." ValidationGroup="MappingGrid" Display="Dynamic" 
        CssClass="message-error"> 
       </asp:RequiredFieldValidator> 
       <asp:RegularExpressionValidator ID="RegExpValSchoologyCourseIDEmpty" ControlToValidate="mgvInsertSchoologyCourseID" runat="server" 
        ErrorMessage="Enter only integers." ValidationGroup="MappingGrid" ValidationExpression="^\d+$" 
        Display="Dynamic" CssClass="message-error"> 
       </asp:RegularExpressionValidator> 
      </td> 
      <td><asp:TextBox ID="mgvInsertCECityActivityID" runat="server" Width="90%"></asp:TextBox> 
       <asp:RegularExpressionValidator ID="RegExpValCECityIDEmpty" ControlToValidate="mgvInsertCECityActivityID" runat="server" 
        ErrorMessage="Enter only 0-9, A-F, and hyphens; maximum length is 50." ValidationGroup="MappingGrid" ValidationExpression="^[0-9A-Fa-f-]{0,50}$" 
        Display="Dynamic" CssClass="message-error"> 
       </asp:RegularExpressionValidator>     
      </td> 
      <td><asp:DropDownList ID="mgvInsertIsActive" runat="server" Width="90%"> 
       <asp:ListItem Selected="True">Yes</asp:ListItem> 
       <asp:ListItem>No</asp:ListItem> 
       </asp:DropDownList></td> 
      <td><asp:TextBox ID="mgvInsertMaxEnrollment" runat="server" Width="90%"></asp:TextBox> 
       <asp:RegularExpressionValidator ID="RegExpValMaxEnrollEmpty" ControlToValidate="mgvInsertMaxEnrollment" runat="server" 
        ErrorMessage="Enter only integers." ValidationGroup="MappingGrid" ValidationExpression="^\d+$" 
        Display="Dynamic" CssClass="message-error"> 
       </asp:RegularExpressionValidator> 
      </td> 
      <td><asp:Button ID="mgvBtnAddEmpty" runat="server" CommandName="Add" Text="Add Mapping" Width="90%" CausesValidation="true" 
       ValidationGroup="MappingGrid" /> 
      </td> 
     </tr> 
    </EmptyDataTemplate> 
</asp:GridView> 

這是我的代碼背後:

protected void MappingGridView_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     MappingGridView.EditIndex = e.NewEditIndex; 
     populateEnrollMappingGrid(); 
    } 

當我單擊編輯按鈕時,不會調用RowEditing方法,並且頁腳行顯示插入操作。

如何獲得編輯按鈕以使點擊可編輯的行?

更新的信息的Page_Load 這是Page_Load方法:

protected void Page_Load(object sender, EventArgs e) 
    {   
     try 
     { 
      if (!IsPostBack) 
      { 
       //Get the Environment Setting to determine the database to access 
       txtBoxEnvironment.Text = CurrentEnvironment; 
       DAL.setCurrentEnvironment(CurrentEnvironment); 

       //Get All Section information from database 
       CSectionInfo.getData(); 

       //Get All Mapping informatio from database 
       CEnrollMappingInfo.getData(); 

       //Populate the Mapping grid 
       MappingGridView.DataSource = CEnrollMappingInfo.getInitialData(); 

       //Populate the Drop Down Section List 
       populateDropDownSectionList(CEnrollMappingInfo.SelectedSectionID); 

       //Grid must be bound after the Dropdown List is set so the value in the footer can be determined 
       MappingGridView.DataBind(); 

       //Populate the Section grid 
       SectionGridView.DataSource = CSectionInfo.getDataUsingSectionID(CEnrollMappingInfo.SelectedSectionID); 

       //Get Course information from database 
       populateCourseGrid(); 

       //Populate the Drop Down Course List 
       populateDropDownCourseList(CSectionInfo.SelectedCourseID); 

       //Grid must be bound after the Dropdown List is set so the value in the footer can be determined 
       SectionGridView.DataBind(); 
      } 
     } 
     catch (Exception ex) 
     { 
      logger.ErrorException(ex.Message, ex); 
      Response.Redirect("~/Error.aspx"); 
     } 
    } 

感謝。

回答

0

我解決了問題...

在我的標記,我設置的編輯按鈕CausesValidation = true和ValidationGroup-MappingGrid這是插入驗證在頁腳中的內容。爲了更正,我將CausesValidation設置爲false並刪除了ValidationGroup。

我在更新按鈕字段中設置這些值。

現在工作!

謝謝。

0

只是猜測,你是在每回發數據綁定GridView

你有Page_Load類似於:

protected void Page_Load(object sender, EventArgs e) 
{   
    populateEnrollMappingGrid(); // a method where you assign the DataSource and call grid.DataBind() 
} 

使用IsPostBack屬性:

protected void Page_Load(object sender, EventArgs e) 
{  
    if(!IsPostBack)  
     populateEnrollMappingGrid(); 
} 
+0

我添加了Page_Load方法。我有3個網格。但映射網格填充(!IsPostBack) –

+0

我不明白何時方法MappingGridView_RowEditing不被調用,當我點擊'編輯'按鈕。我已經按照這個函數的教程。我有一個使用CommandField進行編輯的原型,並且工作正常。 TemplateField是否應該更改回CommandField? –