在tabcontrol中显示多个datatable C# [英] displaying multiple datatable in tabcontrol C#
问题描述
我有一个小程序需要一个datatable(从sql数据库获取数据)
然后将它分割成datatable数组字段,然后应该显示在一个tabcontrol中,其自己的选项卡中的每个字段
i have a small program that takes a datatable (takes data from sql database) then splits it into datatable array by field and then should display it in a tabcontrol, each field in it's own tab
分裂,需要单个datatable并分割成datatable数组,工作正常我想
the split, takes single datatable and splits into datatable array, works fine i think
public DataTable[] splitTable(DataTable mainDT,string columnName)
{
int tmp=0;
DataTable[] splitDT = new DataTable[11];
for (int i=0;i<11;i++)
splitDT[i]=new DataTable();
foreach (DataRow row in mainDT.Rows)
{
tmp = row[columnName].GetHashCode();
splitDT[tmp].ImportRow(row);
}
return splitDT;
}
这里是问题部分
public Display(string Name, string rname, DataTable[] left,int tabNum)
{
InitializeComponent();
TabPage tp;
DataGridView dgw;
lLeftTable.Text = Name;
for (int i = 0; i < tabNum;i++ )
{
tp = new TabPage(""+i);
dgw = new DataGridView();
dgw.DataSource = left[i];
tp.Controls.Add(dgw);
tbcLeftPages.Controls.Add(tp);
tbcLeftPages.Refresh();
}
}
它打开一个带右键的tabcontrol
it opens a tabcontrol with the right amount of tabs but no data in them
编辑1 仍然不错,显示没有gridview的选项卡
将其更改为一个函数这是datatable数组的一部分
EDIT 1 still no good, show tabs with no gridview changed it into a function that get's parts of the datatable array
public void addDGWtoTab(DataTable dt,string side,int num)
{
MessageBox.Show("table:" + side + " bucket:" + num + "rows:" + dt.Rows.Count);
DataGridView dgw = new DataGridView();
TabPage tp = new TabPage();
//data grid view
dgw.Name = "dgv" + num;
dgw.AutoSize = true;
dgw.Dock = DockStyle.Fill;
//tab page
tp.Name = "tp" + num;
tp.Text = "Bucket " + num;
tp.Tag = dt.Rows.Count;
tp.TabIndex = num;
if (side == "left")
tbcLeftPages.Controls.Add(tp);
else tbcRightPages.Controls.Add(tp);
dgw.DataSource = dt;
tp.Controls.Add(dgw);
}
编辑2
添加spitDT
EDIT 2 added spitDT
public DataTable[] splitTable(DataTable mainDT,string columnName,int mod)
{
DataTable[] splitDT = new DataTable[11];
for (int i=0;i<11;i++)
splitDT[i]=new DataTable();
int splitINT;
int tmp=0;
foreach (DataRow row in mainDT.Rows)
{
splitINT = row[columnName].GetHashCode();
tmp = splitINT % mod;
splitDT[tmp].ImportRow(row);
}
return splitDT;
}
编辑3 与邮件分割
public DataTable[] splitTable(DataTable mainDT,string columnName,int mod)
{
DataTable[] splitDT = new DataTable[11];
for (int i=0;i<11;i++)
splitDT[i]=new DataTable();
int splitINT;
int tmp=0;
foreach (DataRow row in mainDT.Rows)
{
splitINT = row[columnName].GetHashCode();
tmp = splitINT % mod;
splitDT[tmp].ImportRow(row);
MessageBox.Show("value:" + row[columnName].ToString() + "splitINT:" + splitINT + "mod:" + mod +
" to table:" + tmp);
MessageBox.Show("" + splitDT[tmp].Rows.Count);
}
return splitDT;
}
推荐答案
模式不会产生任何结果。
The ImportRow on a DataTable without schema doesn't produce any result.
public DataTable[] splitTable(DataTable mainDT,string columnName,int mod)
{
DataTable[] splitDT = new DataTable[11];
for (int i=0;i<11;i++)
{
// Create a datatable with the same structure (schema) of the source table
splitDT[i] = mainDT.Clone();
}
int splitINT;
int tmp=0;
foreach (DataRow row in mainDT.Rows)
{
splitINT = row[columnName].GetHashCode();
tmp = splitINT % mod;
splitDT[tmp].ImportRow(row);
}
return splitDT;
}
此代码仅复制列,而不是整组列。也许你的代码应该创建一个只有要复制的列的数据。
This code copies only a column, not the Whole set of columns. Perhaps your code should create a datatable with only the column to copy from.
这篇关于在tabcontrol中显示多个datatable C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!