ادغام چندین DataTable در یک DataTable با استفاده از ASP.Net

جمعه 4 تیر 1395

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

ادغام چندین DataTable در یک DataTable با استفاده از ASP.Net

مرحله 1 :

یک برنامه ی ASP.Net ایجاد کنید.

1-از منوی Start ، بخش All Programs ، برنامه ی Microsoft Visual Studio را باز کنید.

2-از بخش File ، گزینه ی New Project و سپس یک Empty Project انتخاب می کنیم.

3-یک پروژه به نام "MergeMultipleDataTable" و یا هر نام دلخواه دیگر اضافه کنید.

4-سپس بر روی Solution Explorer کلیک راست کرده و گزینه ی "Add New Item" را انتخاب کنید و یک صفحه ی Default.aspx به پروژه اضافه کنید.

5- سه Grid View به درون صفحه بیاورید تا بتوانیم اطلاعاتمان را در دو تا از آن ها نمایش بدهیم و در سومی آن دو تا را ادغام کنیم.

حالا کدهای درون صفحه ی Default.aspx به صورت زیر خواهند بود:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Defafult.aspx.cs" Inherits="MergeMultipleDataTable.Defafult" %>   
   
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
   
<html xmlns="http://www.w3.org/1999/xhtml">   
<head runat="server">   
    <title></title>   
</head>   
<body style="background-color: Blue">   
    <h4 style="color: White">   
        Article by Vithal Wadje</h4>   
    <form id="form1" runat="server">   
    <div>   
        <h4 style="color: White">   
           DataTable First Records Before Merging   
        </h4>   
        <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">   
            <AlternatingRowStyle BackColor="White" />   
            <EditRowStyle BackColor="#7C6F57" />   
            <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />   
            <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />   
            <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />   
            <RowStyle BackColor="#E3EAEB" />   
            <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />   
            <SortedAscendingCellStyle BackColor="#F8FAFA" />   
            <SortedAscendingHeaderStyle BackColor="#246B61" />   
            <SortedDescendingCellStyle BackColor="#D4DFE1" />   
            <SortedDescendingHeaderStyle BackColor="#15524A" />   
        </asp:GridView>   
        <br />   
        <h4 style="color: White">   
             DataTable second  Records Before Merging   
        </h4>   
        <asp:GridView ID="GridView2" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">   
            <AlternatingRowStyle BackColor="White" />   
            <EditRowStyle BackColor="#7C6F57" />   
            <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />   
            <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />   
            <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />   
            <RowStyle BackColor="#E3EAEB" />   
            <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />   
            <SortedAscendingCellStyle BackColor="#F8FAFA" />   
            <SortedAscendingHeaderStyle BackColor="#246B61" />   
            <SortedDescendingCellStyle BackColor="#D4DFE1" />   
            <SortedDescendingHeaderStyle BackColor="#15524A" />   
        </asp:GridView>   
        <br />   
    </div>   
    <h4 style="color: White">   
         DataTable second  Records after  Merging   
    </h4>   
    <asp:GridView ID="GridView3" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">   
        <AlternatingRowStyle BackColor="White" />   
        <EditRowStyle BackColor="#7C6F57" />   
        <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />   
        <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />   
        <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />   
        <RowStyle BackColor="#E3EAEB" />   
        <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />   
        <SortedAscendingCellStyle BackColor="#F8FAFA" />   
        <SortedAscendingHeaderStyle BackColor="#246B61" />   
        <SortedDescendingCellStyle BackColor="#D4DFE1" />   
        <SortedDescendingHeaderStyle BackColor="#15524A" />   
    </asp:GridView>   
    <br />   
    </form>   
</body>   
</html>  

 

مرحله 2

رکوردهایی را برای  جدول درج کنید.

سناریو ی مقاله

ما فروشنده های مختلفی داریم به این صورت که ما کارمندان گوناگونی را استخدام می کنیم و آن ها رکوردهای درخواستی را در نرم افزار در حال توسعه ی ما با استفاده از یک وب سرویس  وارد می کنند و وظیفه ی ما ادغام اطلاعات مربوط به همه فروشنده ها در یک جدول واحد است تا بتوانیم آن ها را در پایگاه داده وارد کنیم.

صفحه ی Default.aspx.cs را باز کنید و یک جدول مربوط به فروشنده مطابق زیر ایجاد کنید.

DataTable dt = new DataTable();
            DataRow dr = null;
            dt.Columns.Add("شماره کاربری", typeof(int));
            dt.Columns[0].AutoIncrementSeed = 1;
            dt.Columns[0].AutoIncrement = true;
            dt.Columns.Add("نام");
            dt.Columns.Add("شرکت");
            dr = dt.NewRow();
            dr["نام"] = "ایمان مدائنی";
            dr["شرکت"] = "برنامه نویسان";
            dt.Rows.Add(dr);

            DataRow dr2 = null;
            dr2 = dt.NewRow();
            dr2["نام"] = "سجاد باقرزاده";
            dr2["شرکت"] = "برنامه نویسان";
            dt.Rows.Add(dr2);

 

رکوردهای جدول فروشنده به صورت زیر خواهند بود :

حالا جدول دوم مربوط به فروشنده را مطابق زیر ایجاد می کنیم :

            DataTable dt2 = new DataTable();
            DataRow dr1 = null;
         
            dt2.Columns.Add("شماره کاربری", typeof(int));
            dt2.Columns[0].AutoIncrementSeed = 1;
            dt2.Columns[0].AutoIncrement = true;
            dt2.Columns.Add("نام");
            dt2.Columns.Add("شرکت");
            dr1 = dt2.NewRow();
            dr1["نام"] = "علی تمیمی";
            dr1["شرکت"] = "برنامه نویسان";
            dt2.Rows.Add(dr1);

پس از ساخت، به صورت زیر خواهد بود:

ما در اینجا دو جدول از دو فروشنده ی مختلف داریم ، حالا می خواهیم رکوردهای موجود در این دو جدول را در یک جدول ادغام کنیم. برای این کار کافی است تا متد merge از DataTable را استفاده کنیم:

//merging first data table into second data table   
         dt2.Merge(dt);   
         dt2.AcceptChanges();  

تا این مرحله ما دو جدول را در یک جدول ادغام کرده ایم  و رکوردها به صورت زیر خواهند بود:

از مثال بالا فهمیدیم که می توانیم دو جدول را در یک جدول ادغام کنیم. حالا برخی از قوانین مربوط به ادغام DataTable ها را با هم مرور می کنیم :

-اگر تعداد ستون ها با جدول دوم هماهنگ نباشد

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

 

از مثال بالا فهمیدیم که می توانیم دو جدول را در یک جدول ادغام کنیم. حالا برخی از قوانین مربوط به ادغام DataTable ها را با هم مرور می کنیم :

-اگر تعداد ستون ها با جدول دوم هماهنگ نباشد

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

در تصویر بالا می توانیم ببینیم که چون جدول اول فقط دو ستون دارد، و جدول دوم دارای سه ستون است ، در ادغام این دو جدول به جای ستونی که جدول اول ، آن را ندارد، یک فیلد خالی قرار گرفته است.

-اگر نوع داده ی یک ستون از جدول اول با ستون مربوطه از جدول دوم یکسان نباشد

نوع داده ها باید یکسان باشند. اگر نام ستون ها در هر دو جدول یکسان باشد اما نوع داده ی آن ها متفاوت باشد، خطایی مطابق زیر دریافت خواهیم کرد:

بنابراین همانطور که در تصویر می بینیم ، نوع داده ها باید یکسان باشند.

-اگر نام یک ستون از جدول اول با هیچ کدام از ستون ها در جدول دوم یکسان نباشد

اگر نام یک ستون از جدول اول  با هیچ کدام از ستون ها در جدول دیگر یکسان نباشد، مطابق شکل زیر برای هر رکوردی که نام یکسان نداشته باشد یک فیلد خالی ایجاد می کند و بقیه ی ستون ها را مطابق نام های خودشان نمایش می دهد.

حالا بیایید سه جدولی که در ابتدا ساختیم را به هم متصل کرده و در یک جدول ادغام کنیم تا تفاوت هایی که گفته شد را بهتر بفهمیم.

کدکامل موجود در صفحه  ی Defualt.aspx.cs به صورت زیر خواهد بود:

using System;   
using System.Collections.Generic;   
using System.Linq;   
using System.Web;   
using System.Web.UI;   
using System.Web.UI.WebControls;   
using System.Data;   
    
namespace MergeMultipleDataTable   
{   
public partial class Defafult : System.Web.UI.Page   
{   
protected void Page_Load(object sender, EventArgs e)   
{   
    
    
    
DataTable dt = new DataTable();   
DataRow dr = null;   
dt.Columns.Add("Id", typeof(int));   
dt.Columns[0].AutoIncrementSeed = 1;   
dt.Columns[0].AutoIncrement = true;   
dt.Columns.Add("Name");   
dt.Columns.Add("Employer");   
dr = dt.NewRow();   
dr["Name"] = "Vithal Wadje";   
dr["Employer"] = "LT";   
dt.Rows.Add(dr);   
     
DataRow dr2 = null;   
dr2 = dt.NewRow();   
dr2["Name"] = "Dinesh";   
dr2["Employer"] = "Microsoft";   
dt.Rows.Add(dr2);   
     
GridView1.DataSource = dt;   
GridView1.DataBind();   
     
   
 
DataTable dt2 = new DataTable();   
DataRow dr1 = null;   
              
dt2.Columns.Add("Id", typeof(int));   
dt2.Columns[0].AutoIncrementSeed = 1;   
dt2.Columns[0].AutoIncrement = true;   
dt2.Columns.Add("Name");   
dt2.Columns.Add("Employer");   
dr1 = dt2.NewRow();   
dr1["Name"] = "Sudhir Wadje";   
dr1["Employer"] = "Goverment";   
dt2.Rows.Add(dr1);   
GridView2.DataSource = dt2;   
GridView2.DataBind();   
    
//merging first data table into second data table   
dt2.Merge(dt);   
dt2.AcceptChanges();   
GridView3.DataSource = dt2;   
GridView3.DataBind();   
    
}   
}   
} 

حالا برنامه را اجرا کنید. رکوردهای موجود در دو Girdview مطابق زیر خواهند بود:

حالا رکورد های مربوط به جدول سوم که ادغام رکوردهای دو جدول اول می باشد، به صورت زیر خواهد بود:

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید