由于得到的DataSet里不知道具体有几张表,貌似我用Grid_Info指定为数据源后,用this.GridView_Info.Columns["列明"]
去设置属性时候不能确定是那张表的列,所以老是报未将对象引用到实例,如果Grid_Info.DataSource = dataset.Tables[0]时候就可以找到那个列了,现在的问题是我做成用户控件后,每个功能不一样,有的只有一张表,有的有两张表,我想重新构建一个DataTable作为Grid_Info的数据源,有点代码写不好,请前辈们指点下谢谢。。Grid_Info//类型DevExpress.XtraGrid.GridControl 窗体上拖出的控件
GridView_Info //类型DevExpress.XtraGrid.Views.Grid.GridView 窗体上拖出的控件DataTable _dt = new DataTable();
//创建列
foreach (DataTable dt in m_dsAlarms.Tables)
{
foreach (DataColumn dc in dt.Columns)
{
DataColumn _dc = new DataColumn(dc.ColumnName);
if (!_dt.Columns.Contains(_dc.ColumnName))
_dt.Columns.Add(_dc);
}
}
//怎么把几张表里的数据整合到_dt,这段有点问题Grid_Info.DataSource = _dt;
this.GridView_Info.Columns["列明"].......//设置属性
去设置属性时候不能确定是那张表的列,所以老是报未将对象引用到实例,如果Grid_Info.DataSource = dataset.Tables[0]时候就可以找到那个列了,现在的问题是我做成用户控件后,每个功能不一样,有的只有一张表,有的有两张表,我想重新构建一个DataTable作为Grid_Info的数据源,有点代码写不好,请前辈们指点下谢谢。。Grid_Info//类型DevExpress.XtraGrid.GridControl 窗体上拖出的控件
GridView_Info //类型DevExpress.XtraGrid.Views.Grid.GridView 窗体上拖出的控件DataTable _dt = new DataTable();
//创建列
foreach (DataTable dt in m_dsAlarms.Tables)
{
foreach (DataColumn dc in dt.Columns)
{
DataColumn _dc = new DataColumn(dc.ColumnName);
if (!_dt.Columns.Contains(_dc.ColumnName))
_dt.Columns.Add(_dc);
}
}
//怎么把几张表里的数据整合到_dt,这段有点问题Grid_Info.DataSource = _dt;
this.GridView_Info.Columns["列明"].......//设置属性
DataTable _dt = new DataTable(); //全局变量private void Button1_Click(object sender, EventArgs e)
{
DataSet m_dsAlarms = new DataSet();
foreach (DataTable dt in m_dsAlarms.Tables)
{
UniteDataTable(_dt, dt, "new");
}} /// <summary>
/// 合并DataTable
/// </summary>
/// <param name="dt1">DataTable1</param>
/// <param name="dt2">DataTable2</param>
/// <param name="DTName">新DataTable名字</param>
/// <returns></returns>
private DataTable UniteDataTable(DataTable dt1, DataTable dt2, string DTName)
{
DataTable dt3 = dt1.Clone();
for (int i = 0; i < dt2.Columns.Count; i++)
{
dt3.Columns.Add(dt2.Columns[i].ColumnName);
}
object[] obj = new object[dt3.Columns.Count]; for (int i = 0; i < dt1.Rows.Count; i++)
{
dt1.Rows[i].ItemArray.CopyTo(obj, 0);
dt3.Rows.Add(obj);
} if (dt1.Rows.Count >= dt2.Rows.Count)
{
for (int i = 0; i < dt2.Rows.Count; i++)
{
for (int j = 0; j < dt2.Columns.Count; j++)
{
dt3.Rows[i][j + dt1.Columns.Count] = dt2.Rows[i][j].ToString();
}
}
}
else
{
DataRow dr3;
for (int i = 0; i < dt2.Rows.Count - dt1.Rows.Count; i++)
{
dr3 = dt3.NewRow();
dt3.Rows.Add(dr3);
}
for (int i = 0; i < dt2.Rows.Count; i++)
{
for (int j = 0; j < dt2.Columns.Count; j++)
{
dt3.Rows[i][j + dt1.Columns.Count] = dt2.Rows[i][j].ToString();
}
}
}
dt3.TableName = DTName;
_dt = dt3;
return dt3;
} 写了个你看看
DataTable _dt = new DataTable(); foreach (DataTable dt in m_dsAlarms.Tables)
{
foreach (DataColumn dc in dt.Columns)
{
DataColumn _dc = new DataColumn(dc.ColumnName);
if (!_dt.Columns.Contains(_dc.ColumnName))
_dt.Columns.Add(_dc);
}
}
foreach (DataTable dt in m_dsAlarms.Tables)
{
foreach (DataRow row in dt.Rows)
{
DataRow _row = _dt.NewRow();
foreach (DataColumn _dc in _dt.Columns)
{
try
{
if (row[_dc.ColumnName] != null)
{
_row[_dc.ColumnName] = row[_dc.ColumnName];
}
}
catch (Exception ex)
{
XtraMessageBox.Show(ex.Message.ToString());
}
}
_dt.Rows.Add(_row);
}
}