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

استفاده از GridView در انتقال ردیف های انتخاب شده به ردیف های دیگر در ASP.Net
0 0
استفاده از GridView در انتقال ردیف های انتخاب شده به ردیف های دیگر در ASP.Net

با سلام در اینجا توضیح می دهیم چگونه می توان ردیف های انتخاب شده را از یک کنترل ASP.Net GridView به دیگری اضافه یا حذف کرد، به عبارت دیگرردیف های انتخاب شده به یکی دیگر از کنترل GridView ASP.Net کپی و حذف رد های انتخاب نشده از یک کنترل GridView ASP.Net دیگراست .

مفهوم

مفهوم  این آموزش استفاده از DataTable موقت برای نگهداری لیست ردیف یا سوابق انتخاب شده و سپس استفاده از DataTable برای اتصال به GridView ثانویه است .

بنابراین ابتدا با استفاده از این آموزش ابتدا بایستی پایگاه داده Sample Northwind مایکروسافت را با استفاده از لینک زیر به دست آورید .

دانلود Northwind پایگاه داده

GridView Mark-up

در زیرکد HTML از GridView های ASP.Net برای این آموزش استفاده شده است.

GridView اولیه

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

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

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

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

OnPageIndexChanging = "OnPaging" PageSize = "10" >

<Columns>

<asp:TemplateField>

    <HeaderTemplate>

      <asp:CheckBox ID="chkAll" runat="server" onclick = "checkAll(this);"

        AutoPostBack = "true"  OnCheckedChanged = "CheckBox_CheckChanged"/>

    </HeaderTemplate>

    <ItemTemplate>

      <asp:CheckBox ID="chk" runat="server" onclick = "Check_Click(this)"

       AutoPostBack = "true"  OnCheckedChanged = "CheckBox_CheckChanged" />

    </ItemTemplate>

</asp:TemplateField>

<asp:BoundField DataField = "CustomerID" HeaderText = "Customer ID"

 HtmlEncode = "false" />

<asp:BoundField DataField = "ContactName" HeaderText = "Contact Name"

HtmlEncode = "false" />

<asp:BoundField DataField = "City" HeaderText = "City"

HtmlEncode = "false" />

</Columns>

<AlternatingRowStyle BackColor="#C2D69B"  />

</asp:GridView>

 GridView ثانویه

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

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

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

HeaderStyle-BackColor = "green" EmptyDataText = "No Records Selected"  >

<Columns>

   <asp:BoundField DataField = "CustomerID" HeaderText = "Customer ID" />

   <asp:BoundField DataField = "ContactName" HeaderText = "Contact Name" />

   <asp:BoundField DataField = "City" HeaderText = "City" />

 </Columns>

</asp:GridView>

شما متوجه خواهید شد که هر دو GridView ها مشابه هستند، به جز اینکه GridView دوم Pagination و Checkboxes را ندارد .

داده ها اتصال کنترل ASP.Net GridView

از جدول مشتریان از پایگاه داده Northwind برای این مثال استفاده میکنیم. تابع زیر برای کنترل دیتابیس GridView ASP.Net استفاده می شود .

C #

private void BindPrimaryGrid()

{

    string constr = ConfigurationManager

                .ConnectionStrings["conString"].ConnectionString;

    string query = " select CustomerID, ContactName, City from customers";

    SqlConnection con = new SqlConnection(constr);

    SqlDataAdapter sda = new SqlDataAdapter(query, con);

    DataTable dt = new DataTable();

    sda.Fill(dt);

    gvAll.DataSource = dt;

    gvAll.DataBind();

}

VB.Net

Private Sub BindPrimaryGrid()

    Dim constr As String = ConfigurationManager _

                    .ConnectionStrings("conString").ConnectionString()

    Dim query As String="select CustomerID, ContactName, City from customers"

    Dim con As New SqlConnection(constr)

    Dim sda As New SqlDataAdapter(query, con)

    Dim dt As New DataTable()

    sda.Fill(dt)

    gvAll.DataSource = dt

    gvAll.DataBind()

End Sub

نگهداری حالت Checkboxes هنگام پیمایش

این بخش اصلی این مثال است؛ زیرا کار آن این است که ردیفهای انتخاب شده را بدون توجه به صفحه ای که متعلق به آن است، حفظ و تا زمانی که کاربر از یک صفحه به صفحه دیگر میرود وضعیت جعبه ها را درحالت صفحه بندی نگه می دارد .

برای تسهیل این کار از دو روش زیر استفاده میکنیم  :

1. GetData

تابع GetData به سادگی سوابق را برای کاربر چک می کند، آن ها را به یک DataTable اضافه می کند و سپس DataTable را به ViewState متصل میکند .

C #

private void GetData()

{

    DataTable dt;

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

        dt = (DataTable)ViewState["SelectedRecords"];

    else

        dt = CreateDataTable();

    CheckBox chkAll = (CheckBox)gvAll.HeaderRow

                        .Cells[0].FindControl("chkAll");

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

    {

        if (chkAll.Checked)

        {

            dt = AddRow(gvAll.Rows[i], dt);

        }

        else

        {

            CheckBox chk = (CheckBox)gvAll.Rows[i]

                            .Cells[0].FindControl("chk");

            if (chk.Checked)

            {

                dt = AddRow(gvAll.Rows[i], dt);

            }

            else

            {

                dt = RemoveRow(gvAll.Rows[i], dt);

            }

        }

    }

    ViewState["SelectedRecords"] = dt;

}

VB.Net

Private Sub GetData()

   Dim dt As DataTable

   If ViewState("SelectedRecords") IsNot Nothing Then

       dt = DirectCast(ViewState("SelectedRecords"), DataTable)

   Else

       dt = CreateDataTable()

   End If

   Dim chkAll As CheckBox = DirectCast(gvAll.HeaderRow _

                            .Cells(0).FindControl("chkAll"), CheckBox)

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

       If chkAll.Checked Then

           dt = AddRow(gvAll.Rows(i), dt)

       Else

           Dim chk As CheckBox = DirectCast(gvAll.Rows(i) _

                                .Cells(0).FindControl("chk"), CheckBox)

           If chk.Checked Then

                    dt = AddRow(gvAll.Rows(i), dt)

           Else

                    dt = RemoveRow(gvAll.Rows(i), dt)

           End If

       End If

   Next

   ViewState("SelectedRecords") = dt

End Sub

روش GetData از سه روش استفاده می کند :

1. CreateDataTable

2. AddRow

3. RemoveRow

روش CreateDataTable

این روش به سادگی یک شی جدید که طرحش را با افزودن ستون های ضروری است از DataTable ایجاد می کند و سپس شی DataTable را باز می گرداند .

C #

private DataTable CreateDataTable()

{

    DataTable dt = new DataTable();

    dt.Columns.Add("CustomerID");

    dt.Columns.Add("ContactName");

    dt.Columns.Add("City");

    dt.AcceptChanges();

    return dt;

}

VB.Net

Private Function CreateDataTable() As DataTable

   Dim dt As New DataTable()

   dt.Columns.Add("CustomerID")

   dt.Columns.Add("ContactName")

   dt.Columns.Add("City")

   dt.AcceptChanges()

   Return dt

End Function

نام ستون همانند پایگاه داده SQL Server است.

روش AddRow

روش AddRow به سادگی یک ردیف جدید به DataTable اضافه و GridView و DataTable را به عنوان پارامتر قبول می کند . در صورتی که ردیف در DataTable وجود نداشته باشد ، آن را اضافه می کند و DataTable را به روز می کند

C #

private DataTable AddRow(GridViewRow gvRow, DataTable dt)

{

    DataRow[] dr = dt.Select("CustomerID = '" + gvRow.Cells[1].Text + "'");

    if (dr.Length <= 0)

    {

        dt.Rows.Add();

        dt.Rows[dt.Rows.Count - 1]["CustomerID"] = gvRow.Cells[1].Text;

        dt.Rows[dt.Rows.Count - 1]["ContactName"] = gvRow.Cells[2].Text;

        dt.Rows[dt.Rows.Count - 1]["City"] = gvRow.Cells[3].Text;

        dt.AcceptChanges();

    }

    return dt;

}

VB.Net

Private Function AddRow(ByVal gvRow As GridViewRow, ByVal dt As DataTable) As DataTable

    Dim dr As DataRow() = dt.Select("CustomerID = '" _

                                    & gvRow.Cells(1).Text & "'")

    If dr.Length <= 0 Then

        dt.Rows.Add()

        dt.Rows(dt.Rows.Count - 1)("CustomerID") = gvRow.Cells(1).Text

        dt.Rows(dt.Rows.Count - 1)("ContactName") = gvRow.Cells(2).Text

        dt.Rows(dt.Rows.Count - 1)("City") = gvRow.Cells(3).Text

        dt.AcceptChanges()

    End If

    Return dt

End Function

روش RemoveRow

روش RemoveRow به سادگی یک ردیف از DataTable را حذف و ردیف GridView و DataTable را به عنوان پارامتر قبول می کند، در صورتی که ردیف در DataTable موجود باشد، آن را حذف و DataTable به روز میکند .

C #

private DataTable RemoveRow(GridViewRow gvRow, DataTable dt)

{

    DataRow[] dr = dt.Select("CustomerID = '" + gvRow.Cells[1].Text + "'");

    if (dr.Length > 0)

    {

        dt.Rows.Remove(dr[0]);

        dt.AcceptChanges();

    }

    return dt;

}

VB.Net

Private Function RemoveRow(ByVal gvRow As GridViewRow, ByVal dt As DataTable) As DataTable

    Dim dr As DataRow() = dt.Select("CustomerID = '" _

                                    & gvRow.Cells(1).Text & "'")

    If dr.Length > 0 Then

       dt.Rows.Remove(dr(0))

       dt.AcceptChanges()

    End If

    Return dt

End Function

 

روش GetData در رویداد OnPageIndexChanging و نیز رویداد OnCheckedChanged به روش زیر فراخوانی می شود :

رویداد PageIndexChanging

C #

protected void OnPaging(object sender, GridViewPageEventArgs e)

{

    GetData();

    gvAll.PageIndex = e.NewPageIndex;

    BindPrimaryGrid();

    SetData();

}

VB.Net

Protected Sub OnPaging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)

    GetData()

    gvAll.PageIndex = e.NewPageIndex

    BindPrimaryGrid()

    SetData()

End Sub

رویداد CheckBox OnCheckChanged

C #

protected void CheckBox_CheckChanged(object sender, EventArgs e)

{

    GetData();

    SetData();

    BindSecondaryGrid();

}

VB.Net

Protected Sub CheckBox_CheckChanged(ByVal sender As Object, ByVal e As EventArgs)

   GetData()

   SetData()

   BindSecondaryGrid()

End Sub

رویداد فوق این است که کادر انتخاب شده یا بدون علامتگذاری  فراخوانی و به صورت پویا ردیف فعلی انتخاب شده  GridView اولیه را به GridView ثانویه اضافه یا حذف میکنیم بنابراین نشان می دهد که  همه موارد توسط مشتری در GridView ثانویه انتخاب شده اند .

رویداد فوق، تابع BindSecondaryGrid را فراخوانی می کند. کار این تابع این است که به راحتی GridView ثانویه را با DataTable بازیابی شده از ViewState مرتبط میکند .

C #

private void BindSecondaryGrid()

{

    DataTable dt = (DataTable)ViewState["SelectedRecords"];

    gvSelected.DataSource = dt;

    gvSelected.DataBind();

}

VB.Net

Private Sub BindSecondaryGrid()

  Dim dt As DataTable = DirectCast(ViewState("SelectedRecords"), DataTable)

  gvSelected.DataSource = dt

  gvSelected.DataBind()

End Sub

اسکریپت Client Side

 با استفاده از برخی روش های جاوا اسکریپت برای چک کردن گزینه Check -all استفاده کرده ایم .

عکسها

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


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

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