1

ページに 5 つのチェック ボックスがあり、テンプレート フィールドを含むグリッド ビューがあります。ページの読み込み時に結合フィールドを使用していません。グリッドをテーブルのすべてのデータにバインドしています。チェック ボックスのチェックに基づいてデータをフィルタリングしたいです。 .

仮定: ABC D のようなチェック ボックスがあります。すべてのチェック ボックスはグリッド ビューの外側にあります。ユーザーがチェック ボックス A をオンにすると、グリッド ビューで、BC と D の場合と同様に、チェック ボックス A に関連するデータが表示されます。

どうやってそれを行うのですか?, 誰かがいくつかのサンプルコードとビットロジックを教えてください.

ポストバックなしでグリッドビューをフィルタリングできれば素晴らしいと思います。

グリッド:

 <asp:GridView ID="GridView1" runat="server" 
                AutoGenerateColumns="False" CellPadding="3">
      <Columns>
          <asp:TemplateField HeaderText="ID" SortExpression="ID">
            <ItemTemplate>
              <asp:Label ID="lblId" runat="server" Text='<%#Eval("Id") %>'></asp:Label>
           </ItemTemplate>                           
         </asp:TemplateField>
         <asp:TemplateField HeaderText="Discription" SortExpression="Discription">
            <ItemTemplate>
              <asp:Label ID="lblDiscription" runat="server" Text='<%#Eval("Discription") %>'></asp:Label>
            </ItemTemplate>                        
         </asp:TemplateField>
         <asp:TemplateField HeaderText="Address" SortExpression="Address">
            <ItemTemplate>
             <asp:Label ID="lblAddress" runat="server" Text='<%#Eval("Address") %>'></asp:Label>
            </ItemTemplate>
         </asp:TemplateField>
     </Columns>
 </asp:GridView>

グリッドのバインド:

TestPageDao page1Dao = new TestPageDao ();

if (!IsPostBack)
{
  IList<TestDAO> TestDAO = page1Dao.GetAlldata();
  GridView1.DataSource = TestDAO;
  GridView1.DataBind();
}

Filter gridviewまたはhttp://forums.asp.net/p/1034014/2904713.aspxを試しました

4

1 に答える 1

2

ポストバックを回避したい場合は、次のように jQuery を使用します: http://jquerybyexample.blogspot.com/2012/04/how-to-filter-gridview-records-using.html

代替手段は AJAX ですが、話の最後にポストバックのようなアプローチです。

最後に、ポストバックを使用すると、GridView が読み込まれる前に GridView フィルターを動的に設定することで、いくつかの方法でそれを行うことができます。これは、Page load イベント、関連付けられたデータソース (存在する場合) の OnSelecting などで実現できます。

これは aspx の抽出です。

<asp:CheckBox ID="CheckBox1" runat="server" Text="A" />
<asp:CheckBox ID="CheckBox2" runat="server" Text="B" />
<asp:CheckBox ID="CheckBox3" runat="server" Text="C" />
<asp:CheckBox ID="CheckBox4" runat="server" Text="D" />
<hr />

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    DataSourceID="sqlDataSourceGridView" AutoGenerateColumns="False"
    CssClass="GridViewStyle" GridLines="None" Width="650px" >
    <Columns> 
        <asp:BoundField DataField="CompanyName" HeaderText="Company" ItemStyle-Width="200px" />
        <asp:BoundField DataField="ContactName" HeaderText="Name" ItemStyle-Width="125px"/>
        <asp:BoundField DataField="City" HeaderText="city" ItemStyle-Width="125px" />
        <asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="125px" />
    </Columns>
</asp:GridView>

<asp:SqlDataSource ID="SqlDataSourceGridView" runat="server" 
    ConnectionString="<%$ ConnectionStrings:northWindConnectionString %>" 
    SelectCommand="SELECT [CustomerID], [CompanyName], [ContactName], [City], [Country] FROM [Customers]" 
    OnSelecting="SqlDataSourceGridView_Selecting">
 <FilterParameters>
    <asp:ControlParameter ControlID="checkbox1" Name="CompanyName" PropertyName="Checked" ConvertEmptyStringToNull="false" />
 </FilterParameters>
</asp:SqlDataSource>

OnSelecting イベントに注意し、フィルター プリセットがないことに注意してください。

コード ビハインドでフィルタを動的に設定します。

protected void SqlDataSourceGridView_Selecting(object sender, SqlDataSourceSelectingEventArgs e) {
    SqlDataSourceGridView.FilterExpression = string.Empty;
    if (CheckBox1.Checked) {
        SqlDataSourceGridView.FilterExpression += "(CompanyName=1)";
    }
    if (CheckBox2.Checked) {
        if (!string.IsNullOrEmpty(SqlDataSourceGridView.FilterExpression)) SqlDataSourceGridView.FilterExpression += " OR ";
        SqlDataSourceGridView.FilterExpression += "(B=1)";
    }
    if (CheckBox3.Checked) {
        if (!string.IsNullOrEmpty(SqlDataSourceGridView.FilterExpression)) SqlDataSourceGridView.FilterExpression += " OR ";
        SqlDataSourceGridView.FilterExpression += "(C=1)";
    }
    if (CheckBox4.Checked) {
        if (!string.IsNullOrEmpty(SqlDataSourceGridView.FilterExpression)) SqlDataSourceGridView.FilterExpression += " OR ";
        SqlDataSourceGridView.FilterExpression += "(D=1)";
    }
}

OnSelecting イベントが気に入らない場合は、PageLoad でも同じことができます。

protected void Page_Load(object sender, EventArgs e) {
    // here same code of above
    // . . .
}

私はそれをテストしなかったので、小さなエラーを確認してください。

于 2012-04-20T13:44:52.370 に答える