فیلتر گرید ویو براساس انتخاب چندگانه ListBox در Asp.Net

چهارشنبه 2 اردیبهشت 1394

در این مقاله گرید ویو را براساس انتخاب چندگانه ListBox در Asp.Net فیلتر کنیم

فیلتر گرید ویو براساس انتخاب چندگانه ListBox در Asp.Net

در این مقاله سطر های گرید ویو را بر اساس انتخاب چندگانه در Asp.Net فیلتر خواهیم کرد.

دررویداد SelectedIndexChanged لیست باکس سطرهای گرید ویو را فیلتر میکنیم.

دراین مثال از پایگاه داده آموزشی  Northwind استفاده میکنیم برای دانلود و نصب آن به لینک زیر مراجعه کنید:

Download and install Northwind Database

در لیست باکس برخی از کشورها را نمایش می دهیم و  گرید ویو از جدول Customers در پایگاه داده Northwind پرخواهد شد زمانی که یک آیتم از لیست باکس انتخاب شود رکوردهای گرید ویو براساس کشورهای انتخاب شده فیلتر میشوندو اگر آیتمی از لیست باکس انتخاب نشده باشد گرید ویو همه رکورد ها را نشان میدهد.

در صفحه Aspx. یک کنترل گریدویو و یک listBox  به صفحه اضافه کرده برای کنترل listbox  رویداد OnSelectedIndexChanged را برابر مقدار Country_Selected قرار میدهیم و خصوصیت Selection Mode را Multiple قرار میدهیم.

  <asp:ListBox ID="lstCountries" runat="server" AutoPostBack="true" SelectionMode="Multiple"
        OnSelectedIndexChanged="Country_Selected">
        <asp:ListItem Text="Argentina" Value="Argentina"></asp:ListItem>
        <asp:ListItem Text="Austria" Value="Austria"></asp:ListItem>
        <asp:ListItem Text="Belgium" Value="Belgium"></asp:ListItem>
        <asp:ListItem Text="Brazil" Value="Brazil"></asp:ListItem>
        <asp:ListItem Text="Canada" Value="Canada"></asp:ListItem>
    </asp:ListBox>
    <hr />
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" CssClass="grid"
        AllowPaging="true" OnPageIndexChanging="OnPageIndexChanging">
        <Columns>
            <asp:BoundField HeaderText="نام تماس" DataField="ContactName" />
            <asp:BoundField HeaderText="کشور" DataField="Country" />
        </Columns>
    </asp:GridView>

به فضای نام های زیر برای این مثال نیاز داریم:


using System.Data;
using System.Data.SqlClient;
using System.Configuration;

گرید ویو را در رویداد page Load صفحه پر میکنیم .گریدویو با استفاده از پرس وجوی پویا بر اساس انتخاب های ListBox تغییر میکند.اگر آیتمی انتخاب میشود باید به query اضافه شود.

زمانی که آیتمی انتخاب نمی باشد از Query (پرس و جو) زیر استفاده میکنیم:

"SELECT ContactName, Country FROM Customers"

و زمانی که آیتم ها انتخاب شده باشند :

"SELECT ContactName, Country FROM Customers WHERE Country IN ('Argentina', 'Austria')"

با استفاده از Query داینامیک (پویا)  گریدویو(GridView) به آسانی بر اساس آیتم های انتخاب شده فیلتر میشود.

 برای گرید  رویداد OnPageIndexChanging در نظر گرفته میشود که شماره صفحه جدید  به گرید نسبت میدهد و مجددا بایند میشود.

کد صفحه به صورت زیر میباشد:


protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        this.BindGrid();
    }
}
 
private void BindGrid()
{
    string conString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    string query = "SELECT ContactName, Country FROM Customers";
 
    string condition = string.Empty;
    foreach (ListItem item in lstCountries.Items)
    {
        condition += item.Selected ? string.Format("'{0}',", item.Value) : "";
    }
 
    if (!string.IsNullOrEmpty(condition))
    {
        condition = string.Format(" WHERE Country IN ({0})", condition.Substring(0, condition.Length - 1));
    }
 
    using (SqlConnection con = new SqlConnection(conString))
    {
        using (SqlCommand cmd = new SqlCommand(query + condition))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                cmd.Connection = con;
                using (DataTable dt = new DataTable())
                {
                    sda.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
                }
            }
        }
    }
}
 
protected void OnPageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    this.BindGrid();
}

رویداد زیر زمانی که آیتم های LisBox انتخاب میشوند و یا از انتخاب در میآیند اجرا میشوند درون رویداد گریدویو مجددا بر اساس آخرین انتخاب ها پر میشود.


protected void Country_Selected(object sender, EventArgs e)
{
    this.BindGrid();
}

پایگاه داده مورد استفاده نیز در فایل ضمیمه قرار داده شده است

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید