ورود / ثبت نام
0
0

جستجو در GridView توسط موارد انتخابی ListBox در ASP.NET

338 بازدید
جستجو در GridView

جستجو در GridView

در این مقاله با هم به سراغ نحوه ی فیلتر کردن ردیف های GridView بر اساس انتخاب های چندگانه در ASP.NET با سی شارپ و ویژوال بیسیک خواهیم رفت.

جستجو در GridView در داخل رویداد SelectedIndexChanged مربوط به ListBoxقرار دارد.

دیتابیس

در اینجا من از دیتابیس Microsoft Northwind استفاده میکنم.

فیلتر کردن GridView

ListBox ما تعدادی کشور را نشان میدهد و GridView با سوابق جدول مشتری های مربوطه در دیتابیس Northwind پر میشود. زمانی که گزینه های ListBox انتخاب یا عدم انتخاب میشوند ، موارد GridView بر اساس کشور های انتخاب شده فیلتر میشود.

اگر هیچ یک از اشیای ListBox انتخاب نشده باشد ، آنگاه GridView همه ی موارد را نمایش خواهد داد.

HTML

بخش مربوط به HTML شامل یک ASP.NET GridView و کنترل ListBox خواهد بود. کنترل ListBox بر روی رویداد OnSelectedIndexChanged است و خاصیت SelectionMode بر روی Multiple Selections تنظیم میشود.

<asp:ListBoxID="lstCountries"runat="server"AutoPostBack="true"SelectionMode="Multiple"OnSelectedIndexChanged="Country_Selected">
    <asp:ListItemText="Argentina"Value="Argentina"></asp:ListItem>
    <asp:ListItemText="Austria"Value="Austria"></asp:ListItem>
    <asp:ListItemText="Belgium"Value="Belgium"></asp:ListItem>
    <asp:ListItemText="Brazil"Value="Brazil"></asp:ListItem>
    <asp:ListItemText="Canada"Value="Canada"></asp:ListItem>
</asp:ListBox>
<hr/>
<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="false"CssClass="grid"AllowPaging="true"OnPageIndexChanging="OnPageIndexChanging">
    <Columns>
        <asp:BoundFieldHeaderText="Contact Name"DataField="ContactName"/>
        <asp:BoundFieldHeaderText="Country"DataField="Country"/>
    </Columns>
</asp:GridView>

فضای نام ها

احیتاج به افزودن فضای نام های زیر دارید :

سی شارپ

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

ویژوال بیسیک

Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration

پر کردن GridView

GridView در داخل رویاد Page Load پر میشود. GridView با SQL Query داینامیک که بر اساس انتخاب های چندگانه ی ListBox ساخته شده است ، پر میشود.

اشیای ListBox ارث بری میشوند و اگر یک شئ انتخاب شود ، آنگاه به SQL Query نیز اضافه میشود.

در نهایت SQL Query با اضافه شدن شرط WHERE تکمیل میشود و GridView پر میشود.

منطق آن بر اساس زیر است :

"SELECT ContactName, Country FROM Customers"

اگر اشیا انتخاب شوند (در اینجا آرژانتین و اتریش) SQL به صورت زیر در میاید:

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

از آنجاییکه SQL Query به صورت داینامیک است ، GridView میتواند به راحتی توسط انتخاب های چندگانه ListBox فیلتر شود. GridView بر روی رویداد OnPageIndexChanging قرار دارد که به راحتی PageIndex جدید را به GridView قرار میدهد و آن را rebind میکند.

سی شارپ

protectedvoid Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        this.BindGrid();
    }
}
 
privatevoid 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 = newSqlConnection(conString))
    {
        using (SqlCommand cmd = newSqlCommand(query + condition))
        {
            using (SqlDataAdapter sda = newSqlDataAdapter(cmd))
            {
                cmd.Connection = con;
                using (DataTable dt = newDataTable())
                {
                    sda.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
                }
            }
        }
    }
}
 
protectedvoid OnPageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    this.BindGrid();
}

ویژوال بیسیک

ProtectedSub Page_Load(sender AsObject, e AsEventArgs) HandlesMe.Load
    IfNotMe.IsPostBack Then
        Me.BindGrid()
    EndIf
EndSub
 
PrivateSub BindGrid()
    Dim conString AsString = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Dim query AsString = "SELECT ContactName, Country FROM Customers"
 
    Dim condition AsString = String.Empty
    ForEach item AsListItemIn lstCountries.Items
        condition += If(item.Selected, String.Format("'{0}',", item.Value), "")
    Next
 
    IfNotString.IsNullOrEmpty(condition) Then
        condition = String.Format(" WHERE Country IN ({0})", condition.Substring(0, condition.Length - 1))
    EndIf
 
    Using con AsNewSqlConnection(conString)
        Using cmd AsNewSqlCommand(query & condition)
            Using sda AsNewSqlDataAdapter(cmd)
                cmd.Connection = con
                Using dt AsNewDataTable()
                    sda.Fill(dt)
                    GridView1.DataSource = dt
                    GridView1.DataBind()
                EndUsing
            EndUsing
        EndUsing
    EndUsing
EndSub
 
ProtectedSub OnPageIndexChanging(sender AsObject, e AsGridViewPageEventArgs)
    GridView1.PageIndex = e.NewPageIndex
    Me.BindGrid()
EndSub

کنترل رویداد SelectedIndexChanged مربوط به ListBox

رویداد زیر زمانی که اشیای ListBox انتخاب یا عدم انتخاب میشوند اجرا میشود. در داخل این رویداد GridView دوباره پر میشود تا موارد بتوانند بر اساس آخرین انتخاب ها فیلتر شوند.

سی شارپ

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

ویژوال بیسیک

ProtectedSub Country_Selected(sender AsObject, e AsEventArgs)
    Me.BindGrid()
EndSub

موفق باشید !

آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=15792
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
داریوش فرخی
داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .
مطالب بیشتر
برچسب ها:

نظرات

2 نظر در مورد جستجو در GridView توسط موارد انتخابی ListBox در ASP.NET

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *