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

السؤال

نشر (معدل)

قمت بعمل حقول متعددة للاختيار بشكل التالي: قمت بأخذ الشرح من هذا المقال

  http://www.codingfusion.com/Post/Dropdownlist-with-checkboxes-in-asp-net

<asp:listbox runat="server" id="lstBoxTest" selectionmode="Multiple" AutoPostBack="True"
             OnSelectedIndexChanged="lstBoxTest_SelectedIndexChanged">

  <asp:ListItem Value="2">الرقم </asp:ListItem>
  <asp:ListItem Value="3">الاسم</asp:ListItem>
  <asp:ListItem Value="4">البلد</asp:ListItem>


</asp:listbox>

 

وقمت بوضع دالة شرطيه مرتبطه لديه حتى استطيع اخفاء حقول من gridView  في حالة الاختيار من قبل المستخدم كالتالي:

protected void lstBoxTest_SelectedIndexChanged(object sender, EventArgs e)
{

  foreach (ListItem item in lstBoxTest.Items)
  {
    if (item.Selected)
    {
      if (item.Value == "1" )
      {
        gvProducts.Columns[1].Visible = false;
      }
      else if (item.Value == "2")
      {
        gvProducts.Columns[2].Visible = false;
      }
      else if (item.Value == "3")
      {
        gvProducts.Columns[3].Visible = false;
      }
    }
  }
}

الكود شغال في حالة وضع المربع في حالة الاختيار او وضع علامة الصح ولكن مشكلتي لو قمت بعملية تراجع الحقول لا تعود في الجريد فيو 

قمت بمحاولة كتابة الكود بشكل التالي ولم يعمل :

if (item.Value == "1" )
{
  gvProducts.Columns[1].Visible = false;
}
else
{
  gvProducts.Columns[1].Visible = true;
}

 

مع العلم اني قمت بتجربته في Checkbox وهيا تعمل ولكني ارغب باستعمال الطريقة التي في الأعلى على شكل قائمة

كيف يمكن عمل الدالة الشرطية بشكل الصحيح في هذا الحالة لو تكرمتو ووضع شرط انهاء الاخفاء للحقول

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال

Recommended Posts

  • 2
نشر
بتاريخ 36 دقائق مضت قال مروان مروان3:

بنسبة الى الحل الاول قمت بكتابته اعلى foreach ولكن تظهر لدي المشكله التاليه:

أحاول الوصول لخاصية عدد الأعمدة، 

بتاريخ 38 دقائق مضت قال مروان مروان3:

بنسبة الى الحل الاول قمت بكتابته اعلى foreach ولكن تظهر لدي المشكله التاليه:

يجب وضع خيار 

autogeneratecolumns="false"

=>

int temp = GridView1.Columns.Count; // will return 6

حسب المثال

<asp:GridView ID="GridView1" autogeneratecolumns="false" runat="server">
    <columns>
        <asp:boundfield datafield="CustomerID" headertext="Customer ID"/>
        <asp:boundfield datafield="CompanyName" headertext="Company Name"/>
        <asp:boundfield datafield="Address" headertext="Address"/>
        <asp:boundfield datafield="City" headertext="City"/>
        <asp:boundfield datafield="PostalCode" headertext="Postal Code"/>
        <asp:boundfield datafield="Country" headertext="Country"/>
     </columns>
 </asp:GridView>

 

  • 2
نشر

مع كل تبديل في حالة الاختيار، سيتم إرسال القائمة كاملة مع التعديلات، لذلك في كل مرة، يمكننا تحديد أن جميع الخيارات متاحة، ثم نعود و نزيل ما تم تحديده،

  • سأحاول تطبيق الفكرة: الأولى نعتبرهم جميعاً ظاهرين ثم نخفي ما تم تحديده
  1. ضعها قبل for each
  2. const int gvProductsCount = gvProducts.Columns.Count;
    
    for (int i = 0; i < gvProductsCount; i++)
    {
      gvProducts.Columns[i].Visible = true;
    
    }
  3. ثم تأتي for each لتخفي ما تم اختياره.
  • الفكرة الثانية باستخدام if - else
  • foreach (ListItem item in lstBoxTest.Items)
    {
      if (item.Selected)
      {
        // item 1
        if (item.Value == "1" )
        {
          gvProducts.Columns[1].Visible = false;
        }
        else {
          gvProducts.Columns[1].Visible = true;
        }
        // item 2
        if (item.Value == "2" )
        {
          gvProducts.Columns[2].Visible = false;
        }
        else {
          gvProducts.Columns[2].Visible = true;
        }
        // item 3
        if (item.Value == "3" )
        {
          gvProducts.Columns[3].Visible = false;
        }
        else {
          gvProducts.Columns[3].Visible = true;
        }
      }
    }

     

  • 0
نشر
بتاريخ 16 ساعات قال Wael Aljamal:

مع كل تبديل في حالة الاختيار، سيتم إرسال القائمة كاملة مع التعديلات، لذلك في كل مرة، يمكننا تحديد أن جميع الخيارات متاحة، ثم نعود و نزيل ما تم تحديده،

  • سأحاول تطبيق الفكرة: الأولى نعتبرهم جميعاً ظاهرين ثم نخفي ما تم تحديده
  1. ضعها قبل for each
  2. 
    const int gvProductsCount = gvProducts.Columns.Count;
    
    for (int i = 0; i < gvProductsCount; i++)
    {
      gvProducts.Columns[i].Visible = true;
    
    }
  3. ثم تأتي for each لتخفي ما تم اختياره.
  • الفكرة الثانية باستخدام if - else
  • 
    foreach (ListItem item in lstBoxTest.Items)
    {
      if (item.Selected)
      {
        // item 1
        if (item.Value == "1" )
        {
          gvProducts.Columns[1].Visible = false;
        }
        else {
          gvProducts.Columns[1].Visible = true;
        }
        // item 2
        if (item.Value == "2" )
        {
          gvProducts.Columns[2].Visible = false;
        }
        else {
          gvProducts.Columns[2].Visible = true;
        }
        // item 3
        if (item.Value == "3" )
        {
          gvProducts.Columns[3].Visible = false;
        }
        else {
          gvProducts.Columns[3].Visible = true;
        }
      }
    }

     

اهلا بك اخي الكريم

بنسبة الى الحل الثاني انا قمت بتطبيقه مسبقا if and else المشكله لو قمت باختيار اول اختيار على سبيل المثال وقمت بعدها بمحاولة اختيار ثانية يظهر الاختيار الاول وكانني قمت بازلة علامة الصح ويختفي الثاني يحدث امر مثل ذلك لذلك لم استعمله 

 

 

بنسبة الى الحل الاول قمت بكتابته اعلى foreach ولكن تظهر لدي المشكله التاليه:

 61b61ac8758ea_Screenshot2021-12-12195224.png.78bebcf55836688ce0b1add4eeac03df.png

  • 0
نشر
بتاريخ 31 دقائق مضت قال Wael Aljamal:

أحاول الوصول لخاصية عدد الأعمدة، 

يجب وضع خيار 


autogeneratecolumns="false"

=>

int temp = GridView1.Columns.Count; // will return 6

حسب المثال

<asp:GridView ID="GridView1" autogeneratecolumns="false" runat="server">
    <columns>
        <asp:boundfield datafield="CustomerID" headertext="Customer ID"/>
        <asp:boundfield datafield="CompanyName" headertext="Company Name"/>
        <asp:boundfield datafield="Address" headertext="Address"/>
        <asp:boundfield datafield="City" headertext="City"/>
        <asp:boundfield datafield="PostalCode" headertext="Postal Code"/>
        <asp:boundfield datafield="Country" headertext="Country"/>
     </columns>
 </asp:GridView>

 

ربي يرزقك جنات النعيم ويزيدك من واسع فضله وعلمه 

نجح الامر 100%100 

سوف اضع الكود للفائدة بعد التعديل:

  protected void lstBoxTest_SelectedIndexChanged(object sender, EventArgs e)
        {

            int temp = gvProducts.Columns.Count; 

 
            for (int i = 0; i < temp; i++)
            {
                gvProducts.Columns[i].Visible = true;

            }

            foreach (ListItem item in lstBoxTest.Items)
            {
                if (item.Selected)
                {
                    if (item.Value == "1" )
                    {

                        gvProducts.Columns[1].Visible = false;
                    }
                 
                     else if (item.Value == "2")
                    {

                        gvProducts.Columns[2].Visible = false;
                    }
                    else if (item.Value == "3")
                    {

                        gvProducts.Columns[3].Visible = false;
                    }
                   

                }
            }


                }
            }

ممكن استعماله في button او عن طريق لسته بشكل مباشر 

 

مودتي لك 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...