关闭c# winform DataGridView 设置列头超出索引范围的问题

2024-12-19 00:30:47
推荐回答(4个)
回答1:

你在绑定数据之前就已经要修改列头的名称,这是不行的
因为自动创建的话,列的数量是在绑定完成后才开始的
你可以在表格绑定的行绑定事件里面写
也可以在绑定完成后写,还有一种比较简单的方法,是你拿到数据源后直接修改数据集里面的列名称然后直接绑定就可以了。

回答2:

你那个表有几个字段呢

回答3:

先说你这个错误的原因。
dgv的columns的count为0,代表你的DataGridView 上面是没有数据的,既然没有数据,你还为"gv.Columns[0]"DataGridView 的第一列的头部赋值,就会出错。
为了避免这种错误,你可以在为列头赋值之前判断一下
if(ds.Tables[0]!=null&&ds.Tables[0].Rows.Count>0)
{
//执行列头赋值
}
else
{
//跳出不执行
}
还有就是AutoGenerateColumns这个属性,在开发的时候都是把它设为false。
如果没有数据的话,那就是你绑定的问题,和下面的代码没有关系

回答4:

datagridview 的属性中有自动加入标题的选项,干嘛还自己写呢。直接在数据库里面吧列标题改了,不就可以直接显示了吗?
ds.Tables[0].PrimaryKey = new DataColumn[] { ds.Tables[0].Columns["ID"] };
dgv.AutoGenerateColumns = true;
dgv.DataSource = ds.Tables[0];
dgv.Columns[0].HeaderCell.Value = "编号";//调试结果是从这里开始报错的
dgv.Columns[1].HeaderCell.Value = "品牌名称";
dgv.Columns[2].HeaderCell.Value = "出产国";
dgv.Columns[3].HeaderCell.Value = "品牌创始人";
dgv.Columns[4].HeaderCell.Value = "品牌描述";
dgv.Columns[5].HeaderCell.Value = "是否可用";
dgv.Columns[0].ReadOnly = true;
你这几段代码完全就是在浪费精力。
我这有几行代码 功能是将数据库表中数据显示在datagridview中,看看对你是否有帮助
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = Str;
string sql = "select * from RoomManagement";
sda = new SqlDataAdapter(sql, conn);
ds = new DataSet();
sda.Fill(ds, "RoomManagement");
dataGridView1.DataSource = ds.Tables["RoomManagement"];
}