2016-04-26 33 views
3

後,我有了在複選框選擇項目選定行成爲非選擇過濾

如何才能篩選網格視圖,而不會丟失已檢查的項目網格視圖。

的GridView

<asp:GridView ID="gridpur" CssClass="table table-bordered text-nowrap" runat="server" AutoGenerateColumns="False" DataKeyNames="Pro_ID" > 
<Columns> 
<asp:TemplateField HeaderText="Select"> 
<ItemTemplate> 
<asp:CheckBox ID="chkSel" runat="server" /> 
</ItemTemplate> 
</asp:TemplateField> 
</Columns> 
</asp:GridView> 

濾膜代碼

StoreClass s = new StoreClass(); 
gridpur.DataSource = s.SearchPurchase(hdnSearchParam.Value, txtsearch.Text); 
gridpur.DataBind(); 

GridView的數據源

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     StoreClass s = new StoreClass(); 
     gridpur.DataSource = s.getpurchase(); 
     gridpur.DataBind(); 
    } 
} 
+0

商店的複選框的狀態然後再過濾,然後恢復它們,或者將數據綁定到網格的複選框部分設置爲狀態。 –

回答

3

你必須ST之前你DataBind它礦石您選擇複選框(這似乎是Pro_ID列/屬性的鍵),然後之後再次選擇它們:

在您的過濾方法:

List<string> selectedProIDs = gridpur.Rows.Cast<GridViewRow>() 
    .Select(row => new { 
     CheckBox = (CheckBox)row.FindControl("chkSel"), 
     ProID = gridpur.DataKeys[row.RowIndex].Value.ToString() 
    }) 
    .Where(x => x.CheckBox.Checked) 
    .Select(x => x.ProID) 
    .ToList(); 

StoreClass s = new StoreClass(); 
gridpur.DataSource = s.SearchPurchase(hdnSearchParam.Value, txtsearch.Text); 
gridpur.DataBind(); 

foreach(GridViewRow row in gridpur.Rows) 
{ 
    var checkBox = (CheckBox)row.FindControl("chkSel"); 
    string proID = gridpur.DataKeys[row.RowIndex].Value.ToString(); 
    checkBox.Checked = selectedProIDs.Contains(proID); 
}