我需要知道DataGridView中每列的原始类型。
它与动态SQL选择绑定,比如"SELECT * FROM artists;"
我想在网格上方添加数据的表单视图,并以编程方式创建标签和文本框,然后使用一些来保存字段。我将它们添加到FlowLayoutPanel但我想调整大小,特别是多行属性和高度,以容纳200-500个字符的长注释和描述字段。
我在查看文本列时找到的只是数据类型string
。
我知道我可以通过查询systable来查找列,但是找到原始数据类型比这更接近会很好;我也在使用MYSQL atm,而且不需要查询数据库的解决方案也可能是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;
}
只要我知道字段的长度,就不会得到原始类型。
答案 0 :(得分:1)
使用DataSet代替DataGrid:
foreach (DataColumn col in DBDS[ddlb_tables.Text].Text.Columns)
{
if (col.DataType == typeof(string))
{
var len = col.MaxLenght;
...
}
}
编辑:
您可能需要在填写前添加以下行:
DBDA.MissingSchemaAction = MissingSchemaAction.AddWithKey;
编辑2:
或者没有键的结果集:
DBDA.FillSchema(DBDS, SchemaType.Source);
或者:
DBDA.FillSchema(DBDS, SchemaType.Mapped);