如何在GridView中添加页脚

8

我是一位帮助翻译的助手。

我有一个包含三列的网格 - 编辑、ID和电影。我想添加一个页脚,包括一个插入链接按钮和两个文本框,但却无法实现。这是否可能?

ASPX:

 <asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="False"     
 OnRowEditing="gridview1_RowEditing" 
 OnRowCancelingEdit="gridview1_RowCancelingEdit"
    ShowFooter="true" >
    <Columns>
     <asp:CommandField ShowEditButton="true" ShowDeleteButton="true" />
      <asp:BoundField DataField="id" HeaderText="ID" />
      <asp:BoundField DataField="movie" HeaderText="MOVIE" />
     </Columns>
</asp:GridView>

当我尝试以下操作时,命令字段出现错误,提示该元素不受支持。
<Columns>
 <asp:TemplateField>
  <ItemTemplate>
    <asp:CommandField ShowEditButton="true" ShowDeleteButton="true" />
  </ItemTemplate>
 <FooterTemplate>
    <asp:LinkButton ID="lnkInsert" runat="server" Text="Insert"></asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>
</columns>

另一种方法是为每个列控件使用itemTemplate和EditTemplate。但我认为这样太复杂了,想继续采用这种简单的方式。那么,我能否向这个结构添加页脚呢? enter image description here
2个回答

14
是的,这是可能的。但这需要在<TemplateField>内使用<FooterTemplate>。对于每个列使用TemplateFields,并为每个列设置FooterTemplate
注意:这里的ID列似乎是主键。因此,如果ID是主键或者是你的数据库中自动生成的字段,则从相应的<TemplateField>中删除<FooterTemplate>
注意II: <FooterTemplate>将仅包含一个文本框。
<Columns>
<asp:TemplateField>
    <EditItemTemplate>
          <asp:LinkButton ID="lnkBtnUpdate" runat="server" CausesValidation="True"
                         CommandName="Update" Text="Update"></asp:LinkButton>
                         &nbsp;<asp:LinkButton ID="lnkBtnCancel" runat="server"
                         CausesValidation="False"
                         CommandName="Cancel" Text="Cancel">
          </asp:LinkButton>
    </EditItemTemplate>
    <FooterTemplate>
          <asp:LinkButton ID="lnkBtnInsert" runat="server"  
               CommandName="Insert">Insert</asp:LinkButton>
    </FooterTemplate>
    <ItemTemplate>
          <asp:LinkButton ID="lnkBtnEdit" runat="server" CausesValidation="False"
                          CommandName="Edit" Text="Edit"></asp:LinkButton>
                          &nbsp;<asp:LinkButton ID="lnkBtnDelete" runat="server"
                          CausesValidation="False"
                          CommandName="Delete" Text="Delete">
          </asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="ID">
    <EditItemTemplate>
          <asp:TextBox ID="TextBoxID" runat="server" Text='<%# Bind("ID") %>'>
          </asp:Label>
    </EditItemTemplate>
    <ItemTemplate>
          <asp:Label ID="Label1" runat="server" Text='<%# Bind("ID") %>'>
          </asp:Label>
    </ItemTemplate>
    <FooterTemplate>
      <asp:TextBox ID="txtID" runat="server"></asp:TextBox>
    </FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="MOVIE">
    <EditItemTemplate>
          <asp:TextBox ID="TextBoxMovie" runat="server" Text='<%# Bind("Movie") %>'></asp:TextBox>
    </EditItemTemplate>
    <FooterTemplate>
          <asp:TextBox ID="txtMovie" runat="server"></asp:TextBox>
    </FooterTemplate>
    <ItemTemplate>
          <asp:Label ID="Label2" runat="server" Text='<%# Bind("Movie")%>'>
          </asp:Label>
    </ItemTemplate>
</asp:TemplateField>

现在有两种方法可以插入数据。您可以使用 GridView 的 OnRowCommand 事件,也可以处理插入按钮的 OnClick 事件。


谢谢。我知道这种方法,但是我正在寻找其他替代方案,正如我所提到的。有关的过程将在编辑单击时自动将字段转换为输入模式,而无需任何其他代码。但似乎这是唯一的方法。是这样吗?顺便说一下,我在<asp:TemplateField HeaderText =“ID” InsertVisible =“true”>中使用了insertvisible = true和false,但没有任何区别。为什么? - Ruby
是的,目前这是唯一的可能方式。原生的GridView不支持像它支持编辑/更新那样插入记录。因此,无法自动将字段转换为输入模式,因为GridView永远不会呈现为INSERT MODE。此外,InsertVisible属性也不受GridView支持,因为GridView不支持InsertMode。我把它误认为是detailsView。查看以下两个链接以获取更多信息:http://geekswithblogs.net/casualjim/articles/51360.aspx,MSDN:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.datacontrolfield.insertvisible.aspx - R.C
更新了关于InsertVisible属性的答案。如果ID是主键或数据库中的自动生成字段,则只需删除ID列的<FooterTemplate>即可。 - R.C

1
您不能在TemplateField中放置CommandField。但是可以像这样操作:
<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="False"     
 OnRowEditing="gridview1_RowEditing" 
 OnRowCancelingEdit="gridview1_RowCancelingEdit"
    ShowFooter="true" >
        <Columns>
    <asp:TemplateField>
        <ItemTemplate>
            <!--To fire the OnRowEditing event.-->
            <asp:LinkButton ID="lbEdit" runat="server" CommandName="Edit" 
                Text="Edit">
            </asp:LinkButton>
            <!--To fire the OnRowDeleting event.-->
            <asp:LinkButton ID="lbDelete" runat="server" CommandName="Delete" 
                Text="Delete">
            </asp:LinkButton>
        </ItemTemplate>
        <FooterTemplate>
            <asp:LinkButton ID="lnkInsert" runat="server" Text="Insert"></asp:LinkButton>
        </FooterTemplate>
    </asp:TemplateField> 
        <asp:BoundField DataField="id" HeaderText="ID" />
      <asp:BoundField DataField="movie" HeaderText="MOVIE" />
</Columns>    
</asp:GridView>

1
这种方法无法在编辑时将行转换为编辑模式(文本框)。谢谢你的帮助。 - Ruby
你需要在 OnRowUpdated="gridview1_RowUpdated"rowupdated 事件中设置 gridview1.EditIndex = e.NewEditIndex; 并重新绑定数据,如下所示 gridview1.DataBind();。在设置编辑索引并重新绑定数据后,你的 GridView 将呈现 EditItemTemplate - DerpyNerd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接