2016-05-26 10 views
0

私は2つのグリッドビューを持っています。 1つはショップ用で、もう1つはショッピングカート用です。ショップのグリッドビューでは、ユーザーがカートを選択して追加するために、各製品の横にチェックボックスがあります。これにより、ショッピングカートのページに移動し、戻るボタンが表示されます。選択したすべての製品を保持するセッションを作成するには、ユーザーが以前に選択した製品をクリックしても選択されるようにします。ショップのためのGridviewからセッションにチェックボックスを保存する方法は?

GridViewの:

  <Columns> 
      <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" SortExpression="Id" /> 
      <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
      <asp:BoundField DataField="Price" DataFormatString="{0:c2}" HeaderText="Price" SortExpression="Price" /> 
      <asp:TemplateField HeaderText="Add To Cart"> 
       <ItemTemplate> 
        <asp:CheckBox ID="cbAdd" runat="server" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
+0

いつでも、グリッドビューのデータソースをセッションに保存できます。 Form Loadイベントでそのデータを取得し、次にGridviewのOnRowDataBoundでループして、ソースでチェックされている項目を確認します。 – jpaugh78

答えて

0

ユーザーがボックスをチェックしたときにあなたのID値を格納することができます。そして、データ行がバインドされているページのロード時に、格納されたIDのリストを使用してボックスを再チェックすることができます。たとえば、以下を参照してください:

は、IDを保存するために隠しフィールドを追加します。

<asp:HiddenField ID="HiddenSelectedRows" runat="server" /> 

は、GridViewのにOnRowDataBoundイベントを追加します。

function getHiddenSelectedRows() { return $get("<%= this.HiddenSelectedRows.ClientID %>"); };  

var selectedRows = []; 

function rowCheckedChanged(sender){  

     if (sender.checked) { 
    //Find your row's ID value to use later 
      selectedRows.push($("#" + sender.id)[0].parentElement.parentElement.parentElement.cells[1].innerHTML); 
      getHiddenSelectedRows().value = selectedRows; 
     } else { 
      var index = selectedRows.indexOf($("#" + sender.id)[0].parentElement.parentElement.parentElement.cells[1].innerHTML); 
      if (index > -1) { 
       selectedRows.splice(index, 1); 
       getHiddenSelectedRows().value = selectedRows; 
      } 
     } 
    }; 

OnRowDataBound="MyGridView_RowDataBound" 

は、クライアント側のJavaScriptコードを追加します。生成されたイベントコードにサーバーサイドコードを変更します。

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     List<string> selectedRows = this.HiddenSelectedRows.Value.Split(',').ToList(); 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      if (selectedRows.Contains(e.Row.Cells[1].Text)) 
      { 
       CheckBox chk = (CheckBox)e.Row.FindControl("cbSelect"); 
       chk.Checked = true; 
      } 
     } 

    } 
関連する問題