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

C# 如何从asp.net网格视图填充列表?,c#,.net,list,gridview,C#,.net,List,Gridview,我有一个网格视图,我想通过检查支票簿来更新将要选择的所有行。首先,我希望将所有选定的行放入一个列表中。我不知道怎么做。我知道如何从列表中填充网格。 我的网格视图是 <asp:GridView runat="server" ID="GridForResult" Visible="true" ShowHeader="false" AutoGenerateColumns="false"> <Columns>

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

<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中仅获取所选(复选框)行?

我将使复选框列成为TemplateColumn。然后在回发时,需要迭代GridView行集合并执行以下操作:

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

如果您不分页网格,并且希望在回发时保持选中的值,那么这是非常简单的。 在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 primaryKeys=new List();
foreach(GridForResult.Rows中的GridViewRow行)
{
CheckBox check=行。FindControl(“chkSelected”)作为复选框;
如果(勾选,勾选)
{
添加(GridForResult.DataKeys[row.RowIndex].Value.ToString());
}
}
列表现在将保存所有选中的主键。

声明一个字符串类型的集合,
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"]);
列表对象列表=新列表(); foreach(gridViewId中的GridViewRow行) { 复选框chk=行。FindControl(“CheckBoxId”)作为复选框; 如果(已检查通道) { objList.Add(行[“id”].Text); } } 在会话中保存此列表, 会话[“检查列表”]=对象列表; 当你想退休时,使用, objList=List(会话[“检查列表]);
列表对象列表=新列表();
foreach(GridViewRow gvrow在GridView1.Rows中)
{
复选框CheckBox1=(复选框)gvrow.FindControl(“CheckBox1”);
如果(复选框1.选中)
{
objList.Add(行[“id”].Text);
}
}

这里,TestRoll是我的主键。但是当我像primaryKeys.Add(GridForResult.DataKeys[“TestRoll”].Value.ToString()那样编写时;这给了我一个错误:参数类型“string”不能分配给参数类型int,你能解决这个问题吗?这个问题可以通过将一个整数作为数据键的索引来解决,即primaryKeys.Add(GridForResult.Datakeys[index].Value.ToString());其中index是一个int类型变量。
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);    
    }
}