2011-07-12 9 views
0

私はグリッドビューを持っています、私は小切手をチェックして選択されるすべての行を更新したいと思います。最初に、選択したすべての行をリストに追加します。私はそれをする方法を知らない。グリッドにリストを挿入する方法はわかっています。 私のグリッドビューはasp.netのグリッドビューからリストを取り込む方法は?

<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のからのみ選択(チェックボックス)行を取得する方法はありますか?

答えて

1

その:次に、ポストバックであなたはGridViewの行にコレクションを反復処理し、このような何かをする必要があります。 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はは今、すべての主キーを確認し開催します。

+0

ここでは、TestRollが私の主キーです。しかし、私がprimaryKeys.Add(GridForResult.DataKeys ["TestRoll"]。Value.ToString())のように書くときは、それは私にエラーを与えています:引数型 '文字列'は、パラメータ型intに割り当てられません、あなたはこの問題を解決してくださいできますか? – Pankouri

+0

@Pankouri:コードを更新しました。 typoe – naveen

+0

この問題は、Datakeysのインデックス、つまりprimaryKeys.Add(GridForResult.DataKeys [index] .Value.ToString())に整数を配置することで解決できます。 indexはint型の変数です。 – Pankouri

0

私はチェックボックス列をTemplateColumnにします。あなたは、グリッドをページングされていないとあなたがポストバックでチェック値を維持したい場合は、かなりまっすぐ進む

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

私はあなたのポイントを得るddint、ウィルは、あなたはもう少し説明しますか? – Pankouri

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"]); 
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);  
    } 
} 
関連する問題