【发布时间】:2013-05-30 19:15:42
【问题描述】:
我有一个小程序,它需要一个数据表(从 sql 数据库中获取数据) 然后按字段将其拆分为数据表数组,然后应将其显示在选项卡控件中,每个字段都在其自己的选项卡中
拆分,采用单个数据表并拆分为数据表数组,我认为工作正常
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();
}
}
它会打开一个选项卡控件,其中包含适量的选项卡,但其中没有数据
EDIT 1还是不行,显示没有gridview的标签 将其更改为获取数据表数组部分的函数
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
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;
}
EDIT 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;
}
【问题讨论】:
-
确保第一个方法调用返回带有数据的datatable[]。
-
第一种方法你试过了吗?
-
@Steve 我已经尝试在每个拆分表中显示行数...它们不是空的
-
我想看看你如何调用第一种方法。应该填充 splitDT 数组的那个。你在调用周围有一个 try/catch 空处理程序吗?
-
我仍然看不到您如何填充传递给方法
splitTable的 DataTable mainDT。但是,该方法无法正常工作,因为 GetHashCode 返回的数字不能是 0 到 10 之间的数字,需要将某些内容添加到您的 splitDT 数组
标签: c# datagridview datatable tabcontrol