توضیحات و دانلود

حفظ وضعیت Checkboxes در حال بررسی کنترلGridViewدر ASP.Net
0 0
حفظ وضعیت Checkboxes در حال بررسی کنترلGridViewدر ASP.Net

با سلام خدمت دوستان در این مقاله توضیح خواهیم داد که چگونه انتخاب ها را در تمام صفحات در حالی که paginating حفظ می کنید.

برای شروع از  GridView به صورت زیر استفاده می کنیم

<asp:GridView ID="GridView1" runat="server"

AutoGenerateColumns = "false" Font-Names = "Arial"

Font-Size = "11pt" AlternatingRowStyle-BackColor = "#C2D69B" 

HeaderStyle-BackColor = "green" AllowPaging ="true"  

OnPageIndexChanging = "OnPaging" OnRowDataBound = "RowDataBound"  PageSize="10">

<Columns>

<asp:TemplateField>

    <HeaderTemplate>

        <asp:CheckBox ID="chkAll" runat="server"

            onclick = "checkAll(this);" />

    </HeaderTemplate>

    <ItemTemplate>

        <asp:CheckBox ID="CheckBox1" runat="server"

            onclick = "Check_Click(this)"/>

    </ItemTemplate>

</asp:TemplateField>

<asp:BoundField ItemStyle-Width = "150px"

    DataField = "CustomerID" HeaderText = "CustomerID" />

<asp:BoundField ItemStyle-Width = "150px"

    DataField = "City" HeaderText = "City"/>

<asp:BoundField ItemStyle-Width = "150px"

    DataField = "Country" HeaderText = "Country"/>

<asp:BoundField ItemStyle-Width = "150px"

    DataField = "PostalCode" HeaderText = "PostalCode"/>

</Columns>

</asp:GridView>

توجه داشته باشید که توابع جاوا اسکریپت را در جعبه چک باکس می خواهیم

GridView کشیدن داده ها از جدول مشتریان در پایگاه NorthWind است.

فضاهای نام

از آنجا که از ArrayList برای ذخیره چک های ثبت شده استفاده می کنیم، باید فضای نامی زیر را وارد کنید

C #

using System.Collections;

VB.Net

Imports System.Collections

کد زیر بررسی می کند که آیا ViewState ArrayList در آن ذخیره شده است یا خیر، اگر  از ViewState بله می شود، ArrayList جدید ایجاد می کند که کادر انتخاب را ذخیره می کند.

  C #

ArrayList CheckBoxArray;

if (ViewState["CheckBoxArray"] != null)

{

    CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];

}

else

{

    CheckBoxArray = new ArrayList();

}

VB.Net

Dim CheckBoxArray As ArrayList

If ViewState("CheckBoxArray") IsNot Nothing Then

   CheckBoxArray = DirectCast(ViewState("CheckBoxArray"), ArrayList)

Else

   CheckBoxArray = New ArrayList()

End If

 کد بعدی مرجع ردیف سرصفحه را علامت بزنید و چک کنید آیا علامت چک یا علامت گذاری شده است یا نه

اگر چک باکس چک شود، مرجع خود را در ArrayList در فرمت chkAll-0 اضافه می کند که 0 نشانگر صفحه صفحه GridView است.

اگر علامت چک را بدون علامت بررسی کندکه آیا مرجع آن در ArrayList موجود است یا نه، اگر مرجع  باشد، مرجع را از ArrayList حذف می کند و CheckAllWasChecked  را تعیین می کند که در کد بعدی مفید است.

C #

    int CheckBoxIndex;

    bool CheckAllWasChecked=false;

    CheckBox chkAll =

     (CheckBox)GridView1.HeaderRow.Cells[0].FindControl("chkAll");

    string checkAllIndex = "chkAll-" + GridView1.PageIndex;

    if (chkAll.Checked)

    {

        if (CheckBoxArray.IndexOf(checkAllIndex) == -1)

        {

            CheckBoxArray.Add(checkAllIndex);

        }

    }

    else

    {

        if (CheckBoxArray.IndexOf(checkAllIndex) != -1)

        {

            CheckBoxArray.Remove(checkAllIndex);

            CheckAllWasChecked = true;

        }

    }

VB.Net

Dim CheckBoxIndex As Integer

Dim CheckAllWasChecked As Boolean = False

Dim chkAll As CheckBox = _

DirectCast(GridView1.HeaderRow.Cells(0).FindControl("chkAll"), CheckBox)

 

Dim checkAllIndex As String = "chkAll-" & GridView1.PageIndex

 

If chkAll.Checked Then

   If CheckBoxArray.IndexOf(checkAllIndex) = -1 Then

      CheckBoxArray.Add(checkAllIndex)

   End If

Else

   If CheckBoxArray.IndexOf(checkAllIndex) <> -1 Then

      CheckBoxArray.Remove(checkAllIndex)

      CheckAllWasChecked = True

   End If

End If

کد بعدی حلقه ها را از طریق GridView ردیف و چک می کند اگر کادر برای آن ردیف مربوطه چک شده باشدو چک باکس چک شود، موقعیت آن با استفاده از فرمول زیر محاسبه می شود

CheckBoxIndex = GridView1.PageSize * GridView1.PageIndex + (RowIndex + 1)

فرمول بالا به جعبه نشان داده می شود. RowIndex و PageIndex صفر بر اساس شاخص هستند یعنی ردیف اول یا صفحه اول از 0 شروع می شود.

اگر علامت  چک شده CheckBoxIndex آن را به ArrayList اضافه کرده است  آن قبلا وجود داشته باشد و اگر جعبه چک نشده باشد آن  حذف می شود.

C #

for (int i = 0; i < GridView1.Rows.Count; i++)

{

    if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)

    {

        CheckBox chk =

         (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");

        CheckBoxIndex = GridView1.PageSize * GridView1.PageIndex + (i + 1);

        if (chk.Checked)

        {

            if (CheckBoxArray.IndexOf(CheckBoxIndex) == -1

                && !CheckAllWasChecked)

            {

                CheckBoxArray.Add(CheckBoxIndex);

            }

        }

        else

        {

            if (CheckBoxArray.IndexOf(CheckBoxIndex) != -1

                || CheckAllWasChecked)

            {

                CheckBoxArray.Remove(CheckBoxIndex);

            }

        }

    }

}

VB.Net

For i As Integer = 0 To GridView1.Rows.Count - 1

   If GridView1.Rows(i).RowType = DataControlRowType.DataRow Then

     Dim chk As CheckBox = _

     DirectCast(GridView1.Rows(i).Cells(0) _

     .FindControl("CheckBox1"), CheckBox)

     CheckBoxIndex = GridView1.PageSize * GridView1.PageIndex + (i + 1)

     If chk.Checked Then

       If CheckBoxArray.IndexOf(CheckBoxIndex) = -1 And _

       Not CheckAllWasChecked Then

          CheckBoxArray.Add(CheckBoxIndex)

       End If

       Else

         If CheckBoxArray.IndexOf(CheckBoxIndex) <> -1 Or _

          CheckAllWasChecked Then

          CheckBoxArray.Remove(CheckBoxIndex)

       End If

     End If

   End If

Next

کد کامل در زیر آمده است.

C #

if (IsPostBack)

{

    int CheckBoxIndex;

    bool CheckAllWasChecked=false;

    CheckBox chkAll =

     (CheckBox)GridView1.HeaderRow.Cells[0].FindControl("chkAll");

    string checkAllIndex = "chkAll-" + GridView1.PageIndex;

    if (chkAll.Checked)

    {

        if (CheckBoxArray.IndexOf(checkAllIndex) == -1)

        {

            CheckBoxArray.Add(checkAllIndex);

        }

    }

    else

    {

        if (CheckBoxArray.IndexOf(checkAllIndex) != -1)

        {

            CheckBoxArray.Remove(checkAllIndex);

            CheckAllWasChecked = true;

        }

    }

    for (int i = 0; i < GridView1.Rows.Count; i++)

    {

        if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)

        {

          CheckBox chk =

          (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");

           CheckBoxIndex=GridView1.PageSize*GridView1.PageIndex + (i + 1);

          if (chk.Checked)

          {

                if (CheckBoxArray.IndexOf(CheckBoxIndex) == -1

                    && !CheckAllWasChecked)

                {

                    CheckBoxArray.Add(CheckBoxIndex);

                }

          }

          else

          {

                if (CheckBoxArray.IndexOf(CheckBoxIndex) != -1

                    || CheckAllWasChecked)

                {

                    CheckBoxArray.Remove(CheckBoxIndex);

                }

          }

        }

    }

}

VB.Net

If IsPostBack Then

  Dim CheckBoxIndex As Integer

  Dim CheckAllWasChecked As Boolean = False

  Dim chkAll As CheckBox = _

   DirectCast(GridView1.HeaderRow.Cells(0).FindControl("chkAll"), CheckBox)

 

  Dim checkAllIndex As String = "chkAll-" & GridView1.PageIndex

  If chkAll.Checked Then

     If CheckBoxArray.IndexOf(checkAllIndex) = -1 Then

       CheckBoxArray.Add(checkAllIndex)

     End If

  Else

     If CheckBoxArray.IndexOf(checkAllIndex) <> -1 Then

       CheckBoxArray.Remove(checkAllIndex)

       CheckAllWasChecked = True

     End If

  End If

  For i As Integer = 0 To GridView1.Rows.Count - 1

   If GridView1.Rows(i).RowType = DataControlRowType.DataRow Then

     Dim chk As CheckBox = _

      DirectCast(GridView1.Rows(i).Cells(0) _

      .FindControl("CheckBox1"), CheckBox)

     CheckBoxIndex = GridView1.PageSize * GridView1.PageIndex + (i + 1)

     If chk.Checked Then

       If CheckBoxArray.IndexOf(CheckBoxIndex) = -1 And _

        Not CheckAllWasChecked Then

          CheckBoxArray.Add(CheckBoxIndex)

     End If

     Else

      If CheckBoxArray.IndexOf(CheckBoxIndex) <> -1 Or _

        CheckAllWasChecked Then

         CheckBoxArray.Remove(CheckBoxIndex)

       End If

     End If

   End If

  Next

End If

هنگامی که این کار انجام می شود، ArrayList به ViewState ذخیره می شود.

C #

ViewState["CheckBoxArray"] = CheckBoxArray;

VB.Net

ViewState("CheckBoxArray") = CheckBoxArray

در حال حاضر در رویداد Paging از GridView شما نیاز به چک کردن جعبه های موجود در ArrayList که  در ViewState ذخیره کردیم را دارید. اگر گزینه چک All Checked برای فهرست صفحه نمایش داده شود، تمام کادرهای انتخاب را بررسی می کند.

زمانیکه کادرها را بررسی می کنید، رنگ پس زمینه  نیز به همه کادرهای انتخاب شده اعمال می شود.

C #

ArrayList CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];

string checkAllIndex = "chkAll-" + GridView1.PageIndex;

 

if (CheckBoxArray.IndexOf(checkAllIndex) != -1)

{

    CheckBox chkAll =

     (CheckBox)GridView1.HeaderRow.Cells[0].FindControl("chkAll");

    chkAll.Checked = true;

}

for (int i = 0; i < GridView1.Rows.Count; i++)

{

if (GridView1.Rows[i].RowType == DataControlRowType.DataRow)

{

    if (CheckBoxArray.IndexOf(checkAllIndex) != -1)

    {

        CheckBox chk =

         (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");

        chk.Checked = true;

        GridView1.Rows[i].Attributes.Add("style","background-color:aqua");     

    }

    else

    {

      int CheckBoxIndex =GridView1.PageSize*(GridView1.PageIndex)+(i + 1);

      if (CheckBoxArray.IndexOf(CheckBoxIndex) != -1)

      {

         CheckBox chk =

         (CheckBox)GridView1.Rows[i].Cells[0].FindControl("CheckBox1");

        chk.Checked = true;

        GridView1.Rows[i].Attributes.Add("style", "background-color:aqua");

      }

    }

}

}

VB.Net

For i As Integer = 0 To GridView1.Rows.Count - 1

   If GridView1.Rows(i).RowType = DataControlRowType.DataRow Then

     If CheckBoxArray.IndexOf(checkAllIndex) <> -1 Then

       Dim chk As CheckBox = _

        DirectCast(GridView1.Rows(i).Cells(0) _

        .FindControl("CheckBox1"), CheckBox)

       chk.Checked = True

       GridView1.Rows(i).Attributes.Add("style", "background-color:aqua")

     Else

       Dim CheckBoxIndex As Integer

           = GridView1.PageSize*(GridView1.PageIndex)+(i+1)

       If CheckBoxArray.IndexOf(CheckBoxIndex) <> -1 Then

        Dim chk As CheckBox = _

         DirectCast(GridView1.Rows(i).Cells(0) _

         .FindControl("CheckBox1"), CheckBox)

        chk.Checked = True

        GridView1.Rows(i).Attributes.Add("style", "background-color:aqua")

       End If

     End If

   End If

Next

 


دانلود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

ارسال نظر
ارسال پیام به :