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

com.CommandText="SELECT*FROM[Brand]";com.Connection=GetDataSourceConnection();//这是另一个... com.CommandText = "SELECT * FROM [Brand]";
com.Connection = GetDataSourceConnection();//这是另一个方法,获取连接
dp.SelectCommand = com;
ds.Clear();//这是DataSet,dp是OleDbDataAdapter
dp.Fill(ds);
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;
MessageBox.Show(dgv.Columns.Count.ToString());
dp.SelectCommand.Connection.Close();

以上是代码,dgv.Columns[0].HeaderCell.Value从这里开始就报错了,超出索引范围,我调试查看了一下,dgv的columns的count为0,但是我已经设置过了AutoGenerateColumns ,好像没用,另一个窗口和这个代码差不多,但是那个窗口可以正常运行,我找不到问题在哪,请各位帮我看看,谢谢了。
还有很奇怪的一点,我如果不设置列标题,那就可以正常的显示出来,知识列标题就是列名。表6个字段,我都说了不设置列标题就可以显示,现在问题是datagridview不自动生成列。

我再说一次,我的DataGridView 上面是有数据的,因为if(ds.Tables[0]!=null&&ds.Tables[0].Rows.Count>0)结果是为true
展开
 我来答
kuangyan1234
2011-01-06 · 超过74用户采纳过TA的回答
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:138万
展开全部
你在绑定数据之前就已经要修改列头的名称,这是不行的
因为自动创建的话,列的数量是在绑定完成后才开始的
你可以在表格绑定的行绑定事件里面写
也可以在绑定完成后写,还有一种比较简单的方法,是你拿到数据源后直接修改数据集里面的列名称然后直接绑定就可以了。
天马到成功M
2011-01-06 · 超过12用户采纳过TA的回答
知道答主
回答量:104
采纳率:0%
帮助的人:43.2万
展开全部
你那个表有几个字段呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wu7wu7wu
2011-01-06 · TA获得超过279个赞
知道答主
回答量:163
采纳率:100%
帮助的人:126万
展开全部
先说你这个错误的原因。
dgv的columns的count为0,代表你的DataGridView 上面是没有数据的,既然没有数据,你还为"gv.Columns[0]"DataGridView 的第一列的头部赋值,就会出错。
为了避免这种错误,你可以在为列头赋值之前判断一下
if(ds.Tables[0]!=null&&ds.Tables[0].Rows.Count>0)
{
//执行列头赋值
}
else
{
//跳出不执行
}
还有就是AutoGenerateColumns这个属性,在开发的时候都是把它设为false。
如果没有数据的话,那就是你绑定的问题,和下面的代码没有关系
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
最强的力量
2011-01-06 · TA获得超过326个赞
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:113万
展开全部
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"];
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式