2012-08-08 45 views
1

我想通过将当前数据源合并到新数据表,将多个数据表添加到数据源中,而不是每次创建(循环)数据集。将多个数据表(相同模式)添加到当前数据源

这是我的代码:

' Those table are the same but have different data 
' Tables() array, it's an example 

For Each oTable As System.Data.DataTable In Tables 
    DisplayResult(oTable, ColumnsAreCreated) 
Next 

然后我想结果显示在网格:

Private Function DisplayResults(ByVal oTable As System.Data.DataTable, ByRef ColumnsAreCreated As Boolean) As Boolean 

    If oTable.Rows.Count > 0 Then 
     Dim compt As Integer = 0 

     If Not ColumnsAreCreated Then 
      Dim NewColumn As DevExpress.XtraGrid.Columns.GridColumn 
      For Each oColumn As DataColumn In oTable.Columns 
       NewColumn = grdv.Columns.AddField(oColumn.ColumnName) 
       NewColumn.OptionsColumn.ReadOnly = True 
       NewColumn.Visible = True 
       NewColumn.VisibleIndex = compt 
       compt += 1 
      Next 
      ColumnsAreCreated = True 
      ' I want to do something like : grdctrl.DataSource += oTable 
      grdctrl.DataSource = oTable 

      grdv.OptionsView.ColumnAutoWidth = False 
      grdv.BestFitColumns() 
     End If 
    End If 

    Return True 
End Function 

我不想每次删除当前的数据,我想将网格中的当前数据源与下列数据表一个一个地串联起来。

我不想创建一个数据集,放入数据表,最后提供gridcontrol数据集。

有没有办法做到这一点,而无需创建数据集?

回答

0

如果我正确理解你,你想“合并”所有结果,对吧? 为什么不简单地在绑定到单个表格中的网格之前做到这一点? 如果你想在绑定后合并 - 将PGrid绑定到数据源和成员“Table”,然后简单地使用Table.Merge(AddedTable)。这也应该会自动更新你的网格。 确保您没有设置键表中,否则你将得到一个常规合并 希望我理解这个问题:)

+0

事实上,我已经试过这样做了,但是我询问是否有办法在内存中存储数据表直到读取所有表。事实上,处理gridcontrol数据源而不是创建一个新表并在其中存储数据。 – billybob 2012-08-09 12:43:52

+0

那么事情是,Grid.DataSource商店只有对“数据集”或“列表”的引用等(链接到集合存储的东西)。所以为了将多个记录集放入单个占位符中,您使用“DataSet”或DataTable或List是合乎逻辑的。 我也建议加入SQL,而不是在内存中,因为它更高效。通过这样做,你可以使用“serverMode”东西(延迟加载等) – Marty 2012-08-15 22:43:30

0
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!this.IsPostBack) 
    { 
     string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; 
     string query = "SELECT TOP 10 ContactName, City, Country FROM Customers;"; 
     query += "SELECT TOP 10 (FirstName + ' ' + LastName) EmployeeName, City, Country FROM Employees"; 

     using (SqlConnection con = new SqlConnection(constr)) 
     { 
      using (SqlCommand cmd = new SqlCommand(query)) 
      { 
       using (SqlDataAdapter sda = new SqlDataAdapter()) 
       { 
        cmd.Connection = con; 
        sda.SelectCommand = cmd; 
        using (DataSet ds = new DataSet()) 
        { 
         sda.Fill(ds); 
         gvCustomers.DataSource = ds.Tables[0]; 
         gvCustomers.DataBind(); 
         gvEmployees.DataSource = ds.Tables[1]; 
         gvEmployees.DataBind(); 
        } 
       } 
      } 
     } 
    } 
} 

此代码是(如果它们是不同的,而不是增加值将被更新)完全运行代码,希望它对你有所帮助。