关闭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 展开
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 展开
4个回答
展开全部
你那个表有几个字段呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先说你这个错误的原因。
dgv的columns的count为0,代表你的DataGridView 上面是没有数据的,既然没有数据,你还为"gv.Columns[0]"DataGridView 的第一列的头部赋值,就会出错。
为了避免这种错误,你可以在为列头赋值之前判断一下
if(ds.Tables[0]!=null&&ds.Tables[0].Rows.Count>0)
{
//执行列头赋值
}
else
{
//跳出不执行
}
还有就是AutoGenerateColumns这个属性,在开发的时候都是把它设为false。
如果没有数据的话,那就是你绑定的问题,和下面的代码没有关系
dgv的columns的count为0,代表你的DataGridView 上面是没有数据的,既然没有数据,你还为"gv.Columns[0]"DataGridView 的第一列的头部赋值,就会出错。
为了避免这种错误,你可以在为列头赋值之前判断一下
if(ds.Tables[0]!=null&&ds.Tables[0].Rows.Count>0)
{
//执行列头赋值
}
else
{
//跳出不执行
}
还有就是AutoGenerateColumns这个属性,在开发的时候都是把它设为false。
如果没有数据的话,那就是你绑定的问题,和下面的代码没有关系
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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"];
}
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"];
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询