如何查找绑定DataGridView列的数据库类型

本文关键字:DataGridView 数据库 类型 绑定 何查找 查找 | 更新日期: 2023-09-27 18:00:53

我需要知道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;
}

不获取原始类型不是问题,只要我知道字段的长度。

如何查找绑定DataGridView列的数据库类型

使用数据集而不是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);