我如何填充列表<>在两个不同的Gridview中

时间:2014-05-12 02:07:14

标签: c# asp.net gridview

根据我提供的答案和评论,我做了以下修改。由于我有两个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);

3 个答案:

答案 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来分隔列表,但是当您在数据集中进行迭代时,您也可以在那里拆分列表。