CREATE procedure FilterStudentData
(
@stItem VARCHAR(15) = NULL
)
as
begin
SELECT * FROM [Table]
WHERE (Item IN (@stItem, ',')) OR ISNULL(@stItem,'') = ''
end
الكود كامل:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication6.testpage
{
public partial class WebForm3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
PopulateProduct();
}
}
private void PopulateProduct()
{
string str = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(str))
{
using (SqlCommand cmd = new SqlCommand("FilterStudentData", con))
{
cmd.CommandType = CommandType.StoredProcedure;
if (cblBrand.SelectedValue != "")
{
cmd.Parameters.AddWithValue("@stItem", GetCheckedItems(cblBrand));
}
/* if (cblProcessor.SelectedValue != "")
{
cmd.Parameters.AddWithValue("@Processor", GetCheckedItems(cblProcessor));
}
if (cblRam.SelectedValue != "")
{
cmd.Parameters.AddWithValue("@Ram", GetCheckedItems(cblRam));
}
if (cblScreenSize.SelectedValue != "")
{
cmd.Parameters.AddWithValue("@ScreenSize", GetCheckedItems(cblScreenSize));
}
if (cblHardDrive.SelectedValue != "")
{
cmd.Parameters.AddWithValue("@HardDrive", GetCheckedItems(cblHardDrive));
}*/
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
gvProducts.DataSource = ds;
gvProducts.DataBind();
}
}
}
protected void PopulateProductByCategory(object sender, EventArgs e)
{
PopulateProduct();
}
private string GetCheckedItems(CheckBoxList checkBoxList)
{
string checkedItems = string.Empty;
foreach (ListItem item in checkBoxList.Items)
{
if (item.Selected)
{
checkedItems += item.Text + ",";
}
}
checkedItems = checkedItems.Remove(checkedItems.Length - 1);
return checkedItems;
}
protected void Button1_Click(object sender, EventArgs e)
{
}
}
}
<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="WebForm3.aspx.cs"Inherits="WebApplication6.testpage.WebForm3" %>
<!DOCTYPE html><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title></title></head><body><formid="form1"runat="server"><div><div><table><tr><td><table><tr><td>
Item
</td></tr><tr><td><asp:CheckBoxListID="cblBrand"runat="server"AutoPostBack="true"OnSelectedIndexChanged="PopulateProductByCategory"><asp:ListItemText="hp"Value="1"/><asp:ListItemText="dell"Value="2"/></asp:CheckBoxList></td></tr><tr><td>
Size
</td></tr><tr><td><asp:CheckBoxListID="cblProcessor"runat="server"AutoPostBack="true"OnSelectedIndexChanged="PopulateProductByCategory"><asp:ListItemText="100"Value="1"/><asp:ListItemText="250"Value="2"/></asp:CheckBoxList></td></tr><tr><td>
Ram
</td></tr><tr><td><asp:CheckBoxListID="cblRam"runat="server"AutoPostBack="true"OnSelectedIndexChanged="PopulateProductByCategory"><asp:ListItemText="4GB"Value="1"/><asp:ListItemText="8GB"Value="2"/></asp:CheckBoxList></td></tr><tr><td>
colors</td></tr><tr><td><asp:CheckBoxListID="cblScreenSize"runat="server"AutoPostBack="true"OnSelectedIndexChanged="PopulateProductByCategory"><asp:ListItemText="14"Value="1"/><asp:ListItemText="15"Value="2"/></asp:CheckBoxList></td></tr><tr><td>
Hard Drive
</td></tr><tr><td><asp:CheckBoxListID="cblHardDrive"runat="server"AutoPostBack="true"OnSelectedIndexChanged="PopulateProductByCategory"><asp:ListItemText="500GB"Value="1"/><asp:ListItemText="750GB"Value="2"/><asp:ListItemText="1TB"Value="3"/><asp:ListItemText="2TB"Value="4"/></asp:CheckBoxList></td></tr></table></td><tdrowspan="10"><asp:GridViewrunat="server"ID="gvProducts"EmptyDataText="No record for this search criteria."></asp:GridView></td></tr></table></div></div></form></body></html>
هل يعلم احدكم كيف يمكن حل هذا المشكله ؟
حقيقه من يومين ابحث عن حل لها ولم استطع ايجاد لها حل انا جديد قليلا على asp.net
ايضا هل يمكن تنفيذ الطريقه هذا في تصفية البيانات بدون استعمل Stored Procedures؟
قمت بالحصول على مثال المشروع من المقاله التاليه مع تعديل قليلا ليتنساب مع متطلباتي :
السؤال
Flutter Dev
لدي جدول بيانات في قاعدة sql server
يحتوي على المنتج وحجم المنتج وللون المنتج
قمت بعمل Griedview لعرض بيانات هذا الجدول بالاضافة الى اضافة CheckBoxList لتصفية بيانات في هذا Griedview
المشكله الان انني مفترض في حالة اختيار CheckBox الاول اعرض كامل المنتجات التي اسمها hp
ولو قمت باختيار CheckBox الثاني مفترض ان اضيف dell الى قائمة التصفية
ولكن ما يحدث الان في حالة اختيار اثنان من CheckBox لا احصل على نتائج بيانات ابد
ولكن لو قمت باختيار كل واحد على حده احصل على البيانات
صورة المشروع وهو يعمل بدون اختيار اي CheckBox:
صورة المشروع في حالة اختيار واحد :
صورة المشروع في حالة اختيار 2 وهو المشكله بتحديد:
جدول البيانات :
CREATE TABLE [dbo].[Table] ( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [Item] NVARCHAR(MAX) NULL, [size] NVARCHAR(MAX) NULL, [colors] NVARCHAR(MAX) NULL )
جدول Stored Procedures:
CREATE procedure FilterStudentData ( @stItem VARCHAR(15) = NULL ) as begin SELECT * FROM [Table] WHERE (Item IN (@stItem, ',')) OR ISNULL(@stItem,'') = '' end
الكود كامل:
using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication6.testpage { public partial class WebForm3 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { PopulateProduct(); } } private void PopulateProduct() { string str = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; using (SqlConnection con = new SqlConnection(str)) { using (SqlCommand cmd = new SqlCommand("FilterStudentData", con)) { cmd.CommandType = CommandType.StoredProcedure; if (cblBrand.SelectedValue != "") { cmd.Parameters.AddWithValue("@stItem", GetCheckedItems(cblBrand)); } /* if (cblProcessor.SelectedValue != "") { cmd.Parameters.AddWithValue("@Processor", GetCheckedItems(cblProcessor)); } if (cblRam.SelectedValue != "") { cmd.Parameters.AddWithValue("@Ram", GetCheckedItems(cblRam)); } if (cblScreenSize.SelectedValue != "") { cmd.Parameters.AddWithValue("@ScreenSize", GetCheckedItems(cblScreenSize)); } if (cblHardDrive.SelectedValue != "") { cmd.Parameters.AddWithValue("@HardDrive", GetCheckedItems(cblHardDrive)); }*/ SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); gvProducts.DataSource = ds; gvProducts.DataBind(); } } } protected void PopulateProductByCategory(object sender, EventArgs e) { PopulateProduct(); } private string GetCheckedItems(CheckBoxList checkBoxList) { string checkedItems = string.Empty; foreach (ListItem item in checkBoxList.Items) { if (item.Selected) { checkedItems += item.Text + ","; } } checkedItems = checkedItems.Remove(checkedItems.Length - 1); return checkedItems; } protected void Button1_Click(object sender, EventArgs e) { } } }
هل يعلم احدكم كيف يمكن حل هذا المشكله ؟
حقيقه من يومين ابحث عن حل لها ولم استطع ايجاد لها حل انا جديد قليلا على asp.net
ايضا هل يمكن تنفيذ الطريقه هذا في تصفية البيانات بدون استعمل Stored Procedures؟
قمت بالحصول على مثال المشروع من المقاله التاليه مع تعديل قليلا ليتنساب مع متطلباتي :
https://www.aspsnippets.com/questions/159681/Filter-GridView-based-on-multiple-CheckBoxList-like-Flipkart-in-ASPNet/
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.