如何填充列表<>在两个不同的Gridview中
本文关键字:两个 Gridview 何填充 填充 列表 | 更新日期: 2023-09-27 18:02:53
根据我提供的答案和意见,我做了如下修改。因为我有其他的东西比两个Gridviews我没有做任何修改加载方法。我试图在绑定集合时拆分集合。
Gridviews是:
<asp:GridView id ="gvClosed" runat = "server"/>
<asp:GridView id ="gvDraft" runat = "server"/>
The Bind:它在两个GV的
中绑定相同的数据private void bindFiles(bool reload)
{
int size = 10;
List<File> closedFiles = new List<File>();
List<File> draftFiles = new List<File>();
if (ViewState["Files"] != null)
closedFiles = (List<File>)ViewState["Files"];
//draftFiles= (List<File>)ViewState["Drafts"];
else
closedFiles = loadFiles(((User)Session["currentUser"]).ID);
draftFiles = loadFiles(((User)Session["currentUser"]).ID);
List<File> listFiles = new List<File>();
foreach (File f in closedFiles)
listFiles.Add(f);
bool loadPrimary = Session["filterPrimary"] != null ? Convert.ToBoolean : false;
bool loadAll = Session["ViewAllUserFiles"] != null ? Convert.ToBoolean : false;
foreach (File d in draftFiles)
listFiles.Add(d);
if (loadPrimary)
listFiles = listFiles.FindAll(delegate(File f)
{
return f.Modified == true;
});
//Binding to the database
gvFiles.DataSource = listFiles;
gvFiles.DataBind();
gvDraftFiles.DataSource = listFiles;
gvDraftFiles.DataBind();
showHideSortArrows(gvFiles, GridViewType.File);
//showHideSortArrows(gvDraftFiles, GridViewType.Drafts);
将集合拆分为两个集合,然后分别将它们单独绑定到相应的GridViews。更好的做法是,向您的加载方法传递一个参数,您可以在查询中使用该参数来指定您尝试加载的列表类型。这样你就可以使用一个方法来加载你的列表,而不必拆分任何东西。
如果两个列表包含相同的数据,并且您希望将相同的数据绑定到两个或多个控件,您可以这样做。你不需要把它分成不同的列表。
即使你只希望将数据的一个子集绑定到不同的控件,你也可以使用Linq来实现,因为Linq的结果集总是t的IEnumerable
例如: List<string> someList = GetStuffFromDatabase();
// binding to first control, all data
datagridControl1.DataSource = someList;
// binding to second control with subset of data
dropdownListControl1.DataSource = someList.AsEnumerable().Where( t => t.StartsWith("US-") );
等等…这同样适用于所有类型的集合……字典等
ASPX:
<asp:GridView id="gvDraft" runat="server" />
<asp:GridView id="gvClosed" runat="server" />
c# :
closedList = new List<list>();
draftList = new List<list>();
if (ds.Tables.Count != 0)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
List ls = new List();
if (dr["list_id"] != DBNull.Value)
{
ls.ID = Convert.ToInt32(dr["list_id"]);
//I have more this is just for example
if(dr["WhateverIndicatesClosed"] == true)
{
closedList.Add(ls);
}else{
draftList.Add(ls);
}
}
}
}
gvDraft.DataSource = draftList;
gvDraft.DataBind();
gvClosed.DataSource = closedList;
gvClosed.DataBind();
您也可以使用linq来分隔列表,但由于您正在遍历数据集,因此您最好在那里拆分列表。