Code Bye

dataGridView怎么读取sql数据库的多行数据

实际表格是这样
但是程序读出来是这样
为什么会这样,求指导啊
解决方案

30

首先,下面两句代码要放在循环中,否则 dr 只加载了一行
while (sdr.Read())
{
    DataRow dr = dt.NewRow();
    dt.Rows.Add(dr);
}

winform sql 数据操作不建议你这样,很麻烦,给你个示例看看
新建一个form,将代码直接粘贴进去,该数据连接以后运行看效果

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    var table = new DataTable("Table");
    var bs = new BindingSource { DataSource = table, }; // 作为公共数据源用 nav dgv 的 DataSource 都使用该组件
    var nav = new BindingNavigator(true) { Dock = DockStyle.Bottom, BindingSource = bs }; // 数据导航工具栏
    var dgv = new DataGridView { DataSource = bs, Dock = DockStyle.Fill }; // AutoGenerateColumns = true
    Controls.AddRange(new Control[] { dgv, nav }); // 向 Form 添加控件
    var cs = "connectionString"; // 链接字符串
    using (var cn = new SqlConnection(cs))
    {
        var cmd = cn.CreateCommand();
        cmd.CommandText = "exec SP_I_FAT_GetCurrentJob "MXASMTL4""; //  查询
        cmd.CommandType = CommandType.Text;
        // var adapter = new SqlDataAdapter(cmd); // 使用 adapter 只要这么2句代码,datatable 就搞定了
        // adapter.Fill(table);
        cn.Open(); // 使用 adapter 可以不需要显示 open 但 reader 则是必须的
        using (var reader = cmd.ExecuteReader())
        {
            // 获取列名和列数据类型以创建 DataColumn
            // 也可以使用 GetSchemaTable() 方法获取更详细的表结构信息
            for (int i = 0; i < reader.FieldCount; i++)
                table.Columns.Add(reader.GetName(i), reader.GetFieldType(i));
            while (reader.Read())
            {
                var row = table.NewRow(); // 用 table 架构新行
                object[] arr = row.ItemArray; // 获取行数据数组 arr
                reader.GetValues(arr); // 利用 GetValues 方法填充 arr
                table.Rows.Add(arr); // 利用 Rows.Add(object[]) 方法直接将数组 arr 作为行数据填充到表中
            }
        }
    }
    // 假如查询的列名需要更改、列宽需要调整,本人看着办咯
    foreach (DataColumn column in table.Columns)
    {
        // 更换显示的列名
        column.ColumnName = string.Format("Column {0}", table.Columns.IndexOf(column));
    }
}

10

引用 23 楼 zz72238119 的回复:

你的代码和第二张图一样的,正确的应该是第一张图的

那应该是查询的问题,检查 sql 存储吧


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明dataGridView怎么读取sql数据库的多行数据