如何从asp.net网格视图填充列表?

时间:2011-07-12 11:52:16

标签: c# .net list gridview

我有一个网格视图,我想通过检查支票簿来更新将要选择的所有行。首先,我想将所有选定的行放入列表中。我不知道怎么做。我知道如何从列表中填充网格。 我的网格视图是

<asp:GridView runat="server" ID="GridForResult" 
        Visible="true" 
        ShowHeader="false"
        AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField ItemStyle-Width="120px" ItemStyle-Height="22px">
            <ItemTemplate>
                <%#Eval( "TestRoll")%>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField ItemStyle-Width="150px" ItemStyle-Height="22px">
            <ItemTemplate>
                <%#Eval( "Name")%>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField ItemStyle-Width="80px" ItemStyle-Height="22px">
            <ItemTemplate>
                <%#Eval( "Program")%>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField ItemStyle-Width="80px" ItemStyle-Height="22px">
            <ItemTemplate>
                <asp:CheckBox ID="chkSelected" runat="server" Text="Selected" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

我的另一个问题是如何只从gridview获取所选(复选框)行?

4 个答案:

答案 0 :(得分:1)

如果您没有分页并希望在PostBack上保持选中的值,那么它非常简单。 在GridView标记上,设置DataKeyNames="{your primary key}"

代码 - 背后

List<string> primaryKeys = new List<string>();
foreach(GridViewRow row in GridForResult.Rows)
{
    CheckBox check = row.FindControl("chkSelected") as CheckBox;
    if(check.Checked)
    {
        primaryKeys.Add(GridForResult.DataKeys[row.RowIndex].Value.ToString());
    }
}

List<string> primaryKeys 现在将包含所有已检查的主键。

答案 1 :(得分:1)

List<string> objList = new List<string>();        

foreach (GridViewRow gvrow in GridView1.Rows)
{
    CheckBox CheckBox1 = (CheckBox)gvrow.FindControl("CheckBox1");
    if (CheckBox1.Checked)
    {
      objList.Add(row["id"].Text);    
    }
}

答案 2 :(得分:0)

我会将复选框列设为TemplateColumn。然后在回发时,您需要迭代GridView Rows Collection并执行以下操作:

foreach(GridViewRow row in gridViewId)
{
    CheckBox chk = row.FindControl("CheckBoxId") as CheckBox;//use chk value as needed
}

答案 3 :(得分:0)

declare a collection of say string type,
List<string> objList = new List<string>();

foreach(GridViewRow row in gridViewId)
{
    CheckBox chk = row.FindControl("CheckBoxId") as CheckBox;
    if(chk.IsChecked)
    {
     objList.Add(row["id"].Text);
    }
}
save this list in session,
Session["checkedList"] = objList;

when you want to retireve,use,
objList = List<string>(Session["checkedList"]);