我需要知道DataGridView中每列的原始类型。
它与动态SQL选择绑定,例如"SELECT * FROM artists;"
我想在网格上方添加一个数据的表单视图,并通过编程创建标签和文本框,然后创建一些来保存字段。我将它们添加到FlowLayoutPanel中,但我想调整大小,特别是多行属性和高度,以适应200-500个字符的长注释和描述字段。
在查看文本列时,我只发现数据类型为string
。
我知道我可以通过查询systables来查找列,但最好能找到比这更接近的原始数据类型;此外,我使用的是MYSQLatm,而且一个不需要查询数据库的解决方案也有望独立于DBMS。
编辑1
我在DGV中没有任何花哨的东西:
DBDA = new MySqlDataAdapter(sql, DBC);
MySqlCommandBuilder cb = new MySqlCommandBuilder(DBDA);
DBDS = new DataSet(ddlb_tables.Text);
DBDA.FillSchema(DBDS, SchemaType.Mapped); //<- This was the missing piece of code!!
DBDA.Fill(DBDS, ddlb_tables.Text);
dataGridView1.DataSource = DBDS;
dataGridView1.DataMember = ddlb_tables.Text;
编辑2
在公认答案(DBDA.MissingSchemaAction
(的帮助下,我可以解决我的问题。以下是第一个原始版本中的结果函数:
public int getColumnSize(DataGridViewColumn dc)
{
try
{
DataGridView DGV = dc.DataGridView;
DataSet DS = (DataSet)DGV.DataSource;
DataTable DT = DS.Tables[0];
DataColumn DC = DT.Columns[dc.Name];
return DC.MaxLength;
} catch { }
return -1;
}
不获取原始类型不是问题,只要我知道字段的长度。
使用数据集而不是DataGrid:
foreach (DataColumn col in DBDS[ddlb_tables.Text].Text.Columns)
{
if (col.DataType == typeof(string))
{
var len = col.MaxLenght;
...
}
}
编辑:
在填写之前,您可能需要添加以下行:
DBDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
来源:DataAdapter。Fill方法未设置DataTable和DataColumn对象的所有属性
编辑2:
或者对于没有关键字的结果集:
DBDA.FillSchema(DBDS, SchemaType.Source);
或者:
DBDA.FillSchema(DBDS, SchemaType.Mapped);