根据我提供的答案和评论,我做了以下修改。由于我有两个Gridviews以外的其他东西,我没有对load方法进行任何修改。当我绑定它时,我试图拆分集合。
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);
答案 0 :(得分:0)
将您的集合拆分为两个集合,然后将它们分别单独绑定到相应的GridView。更好的是,将一个参数传递给您可以用于查询的加载方法,以指定您尝试加载的列表类型。这样您就可以使用一种方法加载列表,而不必拆分任何内容。
答案 1 :(得分:0)
如果两个列表包含相同的数据,并且您希望将相同的数据绑定到两个或更多控件,则可以执行此操作。你不需要将它拆分成不同的列表。
即使您希望仅将一部分数据绑定到不同的控件,您也可以使用Linq实现这一点,因为Linq结果集始终是IE的数量。
例如:
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-") );
等......这同样适用于所有类型的集合......字典,等等。
答案 2 :(得分:0)
<强> 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来分隔列表,但是当您在数据集中进行迭代时,您也可以在那里拆分列表。