C# 如何填充列表<&燃气轮机;在两个不同的Gridview中

C# 如何填充列表<&燃气轮机;在两个不同的Gridview中,c#,asp.net,gridview,C#,Asp.net,Gridview,根据我得到的答案和意见,我做了以下修改。因为我有两个GridView之外的其他东西,所以我不会对load方法进行任何修改。我试图在绑定集合时拆分集合 网格视图包括: <asp:GridView id ="gvClosed" runat = "server"/> <asp:GridView id ="gvDraft" runat = "server"/> 绑定:它确实绑定了两个GV中的相同数据 private void bindFiles(bool reload)

根据我得到的答案和意见,我做了以下修改。因为我有两个GridView之外的其他东西,所以我不会对load方法进行任何修改。我试图在绑定集合时拆分集合

网格视图包括:

<asp:GridView id ="gvClosed" runat = "server"/>
<asp:GridView id ="gvDraft" runat = "server"/>

绑定:它确实绑定了两个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);
private void bindFiles(bool重载)
{
int size=10;
List closedFiles=新列表();
List draftFiles=新列表();
如果(ViewState[“文件”]!=null)
closedFiles=(列表)视图状态[“文件”];
//draftFiles=(列表)视图状态[“草稿”];
其他的
closedFiles=loadFiles(((用户)会话[“当前用户]).ID);
draftFiles=loadFiles(((用户)会话[“当前用户]).ID);
List listFiles=新列表();
foreach(closedFiles中的文件f)
添加(f);
bool loadPrimary=Session[“filterPrimary”]!=null?Convert.ToBoolean:false;
bool loadAll=Session[“ViewAllUserFiles”]!=null?Convert.ToBoolean:false;
foreach(draftFiles中的文件d)
添加(d);
如果(主加载)
listFiles=listFiles.FindAll(委托(文件f)
{ 
返回f.Modified==true;
});
//绑定到数据库
gvFiles.DataSource=listFiles;
gvFiles.DataBind();
gvDraftFiles.DataSource=listFiles;
gvDraftFiles.DataBind();
showHideStoreRows(gvFiles,GridViewType.File);
//showHideStoreRows(gvDraftFiles,GridViewType.Drafts);

将集合拆分为两个集合,然后分别将它们绑定到相应的GridView。更好的方法是,向加载方法传递一个参数,您可以使用该参数进行查询,以指定要加载的列表的类型。这样,您就可以只使用一种方法加载列表,而不必拆分任何内容ng.

如果两个列表包含相同的数据,并且您希望将相同的数据绑定到两个或多个控件,您可以这样做。您不需要将其拆分为不同的列表

即使您只希望将数据的一个子集绑定到不同的控件,也可以使用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-") );
List someList=GetStuffFromDatabase();
//绑定到第一个控件,所有数据
datagridControl1.DataSource=someList;
//使用数据子集绑定到第二个控件
dropdownListControl1.DataSource=someList.AsEnumerable()。其中(t=>t.StartsWith(“US-”);
等等……这同样适用于所有种类的收藏……字典等。

ASPX:

<asp:GridView id="gvDraft" runat="server" />
<asp:GridView id="gvClosed" runat="server" />
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();

C#:

<asp:GridView id="gvDraft" runat="server" />
<asp:GridView id="gvClosed" runat="server" />
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();
closedList=新列表();
draftList=新列表();
如果(ds.Tables.Count!=0)
{
foreach(ds.Tables[0].行中的数据行dr)
{
列表ls=新列表();
if(dr[“list_id”]!=DBNull.Value)
{
ls.ID=Convert.ToInt32(dr[“list_ID”);
//我有更多这只是一个例子
如果(dr[“whateverificatesclosed”]==true)
{
closedList.Add(ls);
}否则{
草图列表。添加(ls);
}
}
}
}
gvDraft.DataSource=草稿列表;
gvDraft.DataBind();
gvClosed.DataSource=closedList;
gvClosed.DataBind();

您也可以使用linq来分隔列表,但在遍历数据集时,您也可以在那里拆分列表。

那么,您到目前为止尝试了什么,它怎么没有达到您希望的效果?@mason,上面的代码就是我尝试过的。关闭的列表将返回数据库中的所有内容。我需要帮助的部分是implementing Listdrafts。正如您所见,由于我无法确定代码是否被注释掉,所以您没有显示任何从数据库加载数据的代码。这可能是一件重要的事情。@mason,好的,这是loads@mason我已经更新了我的原始帖子,以显示加载方法。我已经尝试了你的方法。我的问题是我不能对load方法做太多修改,因为它是主页,除了两个GridView之外还有很多其他信息。我的目标是使用一个ListListFromDB=new List();一个通用的方法,并将其拆分为两个,不是在我的load方法中,而是在这个方法中私有void bindLists(bool reload)List closed=new List();//List drafts=new List();@B.K.好的,这是我想要拆分为两部分并将其绑定到不同gv的部分。页面的加载方法相同。我想要更改此模板列表是我想要拆分为两部分的列表。私有void bindLists(bool reload){int size=20;列表模板列表=new List();@user3495554什么是
所有列表
?这是我在表中的所有列表。我编辑了我的原始帖子。我试图拆分它,因为它在两个网格视图上绑定了相同的数据。好吧,这个想法是你可以将N次bing绑定到相同的结构。你也可以通过适当的修改从标记中执行相同的操作。唯一的问题是使用该绑定可以看到,每次更新集合或加载控件时,它都必须运行该查询表达式。在较小的集合上它不明显,但在较大的集合上会很烦人。@B.K.,我编辑了我以前的代码,当前的代码确实绑定,但它在两个网格视图中绑定相同的数据。我知道我的拆分并不有趣我想是这样的。你能帮我一下吗,谢谢?