我目前正在开发一个网站,其中一个页面需要在不同的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并继续按照我的方式工作。
下面的图片是我到目前为止。文件名上方是每个网格的主标题
提前感谢您的帮助
答案 0 :(得分:1)
这是一个使用嵌套ListView
的快速而肮脏的示例。
我在这里使用了两个课程Directory
和DirectoryFile
。
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内置功能,例如排序等等。