使用多个GridView

时间:2015-05-20 13:49:36

标签: c# asp.net gridview

我目前正在开发一个网站,其中一个页面需要在不同的GridView中显示数据。那些页面看起来像

<h2>First Header</h2>
<p>Some text</p>
<asp:GridView ID="FirstGrid" runat="server"/>
...
<h2>Second Header</h2>
<p>Some text</p>
<asp:GridView ID="SecondGrid" runat="server"/>
...
<h2>Third Header</h2>
<p>Some text</p>
<asp:GridView ID="ThirdGrid" runat="server"/>
...

总共我会有大约6-7 Gridviews。每个网格显示来自不同目录的文件。目前我有一个函数BindGridView(string directoryName),我为每个网格DataSource

执行以下操作
FirstGrid.DataSource = BindGridView("First Directory");
FirstGrid.DataBind();
SecondGrid.DataSource = BindGridView("Second Directory");
SecondGrid.DataBind();
...

我的问题是我可以有一个Gridview并更改DataSource或者我是否需要全部6-7并继续按照我的方式工作。

下面的图片是我到目前为止。文件名上方是每个网格的主标题

enter image description here

提前感谢您的帮助

2 个答案:

答案 0 :(得分:1)

这是一个使用嵌套ListView的快速而肮脏的示例。

我在这里使用了两个课程DirectoryDirectoryFile

namespace WebFormsApp
{
    public class Directory
    {
        // the directory names like First Directory
        public string DirectoryName { get; set; }
        // the content that comes under header tag
        public string HeaderText { get; set; }
        // the content that comes under p tag
        public string InfoText { get; set; }
    }
    public class DirectoryFile
    {
        // file name
        public string FileName { get; set; }
        // download url
        public string Url { get; set; }
    }
}

标记应该像

<asp:ListView ID="DirectoryList" runat="server" 
    ItemType="WebFormsApp.Directory" 
    SelectMethod="GetDirectories"
    OnItemDataBound="DirectoryList_ItemDataBound">   
    <ItemTemplate>
        <h2><%# Item.HeaderText %></h2>
        <p><%# Item.InfoText %></p>
        <asp:ListView ID="FileList" runat="server" 
            DataMember='<%# Item.DirectoryName %>' 
            ItemType="WebFormsApp.DirectoryFile">
            <LayoutTemplate>
                <table>
                    <thead>
                        <tr>
                            <th>File Name</th>
                            <th>Download</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr id="itemPlaceHolder" runat="server"></tr>
                    </tbody>
                </table>
            </LayoutTemplate>
            <ItemTemplate>
                <tr>
                    <td><%# Item.FileName %></td>
                    <td><%# Item.Url %></td>
                </tr>
            </ItemTemplate>
        </asp:ListView>
    </ItemTemplate>
</asp:ListView>

此处,父ListView的{​​{1}}除SelectMethod="GetDirectories"以外。方法将是

ItemType="WebFormsApp.Directory"

最后连接一个public List<Directory> GetDirectories() { //assuming it will be a not populated from database. // if so change your code accordingly var directories = new List<Directory>() { new Directory {DirectoryName="FirstDirectory", HeaderText="First Header", InfoText="Some Info"}, new Directory {DirectoryName="SecondDirectory", HeaderText="Second Header", InfoText="Other Info"} }; return directories; } 方法(它遍历每个项目)并找到子ListView。请注意,我们提供了ItemDataBound,以便我们可以在代码隐藏处访问它。

DataMember='<%# Item.DirectoryName %>'

希望代码不言自明

答案 1 :(得分:0)

如果是这种情况,只需使用嵌套转发器即可。除非你真的需要GridView内置功能,例如排序等等。