اذهب إلى المحتوى

السؤال

نشر

لدي جدول بيانات في قاعدة sql server 

يحتوي على المنتج وحجم المنتج وللون المنتج

قمت بعمل Griedview لعرض بيانات هذا الجدول بالاضافة الى اضافة CheckBoxList لتصفية بيانات في هذا Griedview 

المشكله الان انني مفترض في حالة اختيار CheckBox الاول اعرض  كامل المنتجات التي اسمها hp 

ولو قمت باختيار CheckBox الثاني مفترض ان اضيف dell الى قائمة التصفية 

ولكن ما يحدث الان في حالة اختيار اثنان من CheckBox لا احصل على نتائج بيانات ابد 

ولكن لو قمت باختيار كل واحد على حده احصل على البيانات 

صورة المشروع وهو يعمل بدون اختيار اي  CheckBox:

11.thumb.png.c7db416a52470b37cd42128101d42ff1.png

صورة المشروع في حالة اختيار واحد :

619bb306b0482_Screenshot2021-11-22191046.thumb.png.36856707011068df380a4a5f413f9888.png

صورة المشروع في حالة اختيار 2 وهو المشكله بتحديد:

619bb354e0807_Screenshot2021-11-22191204.thumb.png.bcb9b8c11c4c51eb2e8049cfd7f48bb6.png

جدول البيانات :

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)
        {

        }
    }
}

 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="WebApplication6.testpage.WebForm3" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <div>
    <table>
        <tr>
            <td>
                <table>
                    <tr>
                        <td>
                            Item
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <asp:CheckBoxList ID="cblBrand" runat="server" AutoPostBack="true" OnSelectedIndexChanged="PopulateProductByCategory">
                                <asp:ListItem Text="hp" Value="1" />
                                <asp:ListItem Text="dell" Value="2" />
                       
                            </asp:CheckBoxList>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            Size
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <asp:CheckBoxList ID="cblProcessor" runat="server" AutoPostBack="true" OnSelectedIndexChanged="PopulateProductByCategory">
                                <asp:ListItem Text="100" Value="1" />
                                <asp:ListItem Text="250" Value="2" />
                            </asp:CheckBoxList>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            Ram
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <asp:CheckBoxList ID="cblRam" runat="server" AutoPostBack="true" OnSelectedIndexChanged="PopulateProductByCategory">
                                <asp:ListItem Text="4GB" Value="1" />
                                <asp:ListItem Text="8GB" Value="2" />
                            </asp:CheckBoxList>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            colors</td>
                    </tr>
                    <tr>
                        <td>
                            <asp:CheckBoxList ID="cblScreenSize" runat="server" AutoPostBack="true" OnSelectedIndexChanged="PopulateProductByCategory">
                                <asp:ListItem Text="14" Value="1" />
                                <asp:ListItem Text="15" Value="2" />
                            </asp:CheckBoxList>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            Hard Drive
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <asp:CheckBoxList ID="cblHardDrive" runat="server" AutoPostBack="true" OnSelectedIndexChanged="PopulateProductByCategory">
                                <asp:ListItem Text="500GB" Value="1" />
                                <asp:ListItem Text="750GB" Value="2" />
                                <asp:ListItem Text="1TB" Value="3" />
                                <asp:ListItem Text="2TB" Value="4" />
                            </asp:CheckBoxList>
                        </td>
                    </tr>
                </table>
            </td>
            <td rowspan="10">
                <asp:GridView runat="server" ID="gvProducts" EmptyDataText="No record for this search criteria.">
                </asp:GridView>
              
            </td>
        </tr>
    </table>
</div>
        </div>
    </form>
</body>
</html>

هل يعلم احدكم كيف يمكن حل هذا المشكله ؟ 

حقيقه من يومين ابحث عن حل لها ولم استطع ايجاد لها حل انا جديد قليلا على asp.net

ايضا هل يمكن تنفيذ الطريقه هذا في تصفية البيانات بدون استعمل Stored Procedures؟

قمت بالحصول على مثال المشروع من المقاله التاليه مع  تعديل قليلا ليتنساب مع متطلباتي :

https://www.aspsnippets.com/questions/159681/Filter-GridView-based-on-multiple-CheckBoxList-like-Flipkart-in-ASPNet/

Recommended Posts

  • 0
نشر

يبدو أن المشكلة لديك هي في إجرائية FilterStudentData حيث أنك تمرر لها نص عبارة عن أسماء العلامات التجارية مفصولة فيما بينها بفاصلة "," يجب معالجة هذه القيمة وفصل العناصر وتحويلها إلى مصفوفة ليكون لها معنى عند تمريرها للمعامل IN

يبدو أنك نسيت ذكر التابع dbo.SplitString قبل القوسين حاول تعديل الإجرائية إلى التالي:

CREATE PROCEDUER FilterStudentData
(
  @stItem VARCHAR(15) = NULL
)
AS
BEGIN

SELECT * FROM [Table]
WHERE (Item IN dbo.SplitString(@stItem, ',')) OR ISNULL(@stItem,'') = ''

END

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...