列计数属性不能在数据绑定的datagridview控件上设置c# [英] column count property cannot be set on a databound datagridview control c#
问题描述
public formAccounts()
{
InitializeComponent();
BindGrid();
}
private void BindGrid()
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = @Provider = Microsoft.Jet.OLEDB.4.0; Data Source = G:\Sanjeev\TESTDB\DB.mdb; Jet OLEDB:数据库密码= Test123; Jet OLEDB:引擎类型= 5;
conn.Open();
string constring = @Provider = Microsoft.Jet.OLEDB.4.0; Data Source = G:\Sanjeev\TESTDB\DB.mdb; Jet OLEDB:Database Password = Test123; Jet OLEDB:Engine Type = 5;
using(OleDbConnection con = new OleDbConnection(constring))
{
using(OleDbCommand cmd = new OleDbCommand(SELECT * FROM tblAccounts,con))
{
cmd.CommandType = CommandType.Text;
using(OleDbDataAdapter sda = new OleDbDataAdapter(cmd))
{
using(DataTable dt = new DataTable())
{
sda.Fill(dt);
//设置AutoGenerateColumns False
dtGrdAccounts.AutoGenerateColumns = false;
//设置列计数
*** dtGrdAccounts.ColumnCount = 3; ***
//添加列
dtGrdAccounts.Columns [0] .Name =AccountID;
dtGrdAccounts.Columns [0] .HeaderText =Id;
dtGrdAccounts.Columns [0] .DataPropertyName =AccID;
dtGrdAccounts.Columns [1] .HeaderText =帐户名称;
dtGrdAccounts.Columns [1] .Name =帐户名称;
dtGrdAccounts.Columns [1] .DataPropertyName =AccName;
dtGrdAccounts.Columns [2] .Name =AccountNumber;
dtGrdAccounts.Columns [2] .HeaderText =帐号;
dtGrdAccounts.Columns [2] .DataPropertyName =AccNumber
dtGrdAccounts.DataSource = dt;
}
}
}
}
}
如果我删除行 dtGrdAccounts.ColumnCount = 3;
我正在下错误。
索引超出范围。必须是非负数且小于集合的大小。
参数名称:索引
添加新记录后,On按钮保存我正在调用BindGrid()方法来获取记录在GridiView中。
string cmdText =prAddAccounts;
OleDbCommand cmd = new OleDbCommand(cmdText,conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(AccName,txtAccName.Text.ToString());
// .....其他参数插入记录.....
OleDbCommand cmd = new OleDbCommand(cmdText,conn);
cmd.CommandType = CommandType.StoredProcedure;
OleDbDataReader reader = cmd.ExecuteReader();
BindGrid();
问题是当您调用 BindGrid()
再次你必须先清除它:
string cmdText =prAddAccounts ;
OleDbCommand cmd = new OleDbCommand(cmdText,conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(AccName,txtAccName.Text.ToString());
// .....其他参数插入记录.....
//清除绑定。
dtGrdAccounts.DataSource = null;
//绑定新数据。
BindGrid();
In My form I have a DataGridView. and controls for input and output data. while displaying data in the gird view. I am calling BindGrid in two occasions. One while formload and other is After adding a new record.
public formAccounts()
{
InitializeComponent();
BindGrid();
}
private void BindGrid()
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= G:\Sanjeev\TESTDB\DB.mdb;Jet OLEDB:Database Password=Test123; Jet OLEDB:Engine Type=5";
conn.Open();
string constring = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=G:\Sanjeev\TESTDB\DB.mdb;Jet OLEDB:Database Password=Test123; Jet OLEDB:Engine Type=5";
using (OleDbConnection con = new OleDbConnection(constring))
{
using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM tblAccounts", con))
{
cmd.CommandType = CommandType.Text;
using (OleDbDataAdapter sda = new OleDbDataAdapter(cmd))
{
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
//Set AutoGenerateColumns False
dtGrdAccounts.AutoGenerateColumns = false;
//Set Columns Count
***dtGrdAccounts.ColumnCount = 3;***
//Add Columns
dtGrdAccounts.Columns[0].Name = "AccountID";
dtGrdAccounts.Columns[0].HeaderText = "Id";
dtGrdAccounts.Columns[0].DataPropertyName = "AccID";
dtGrdAccounts.Columns[1].HeaderText = "Account name";
dtGrdAccounts.Columns[1].Name = "Account name";
dtGrdAccounts.Columns[1].DataPropertyName = "AccName";
dtGrdAccounts.Columns[2].Name = "AccountNumber";
dtGrdAccounts.Columns[2].HeaderText = "Account number";
dtGrdAccounts.Columns[2].DataPropertyName = "AccNumber";
dtGrdAccounts.DataSource = dt;
}
}
}
}
}
If I remove the line dtGrdAccounts.ColumnCount = 3;
I am getting below error.
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
After adding the a new record , On button save I am calling BindGrid() method to get the record in the GridiView.
string cmdText = "prAddAccounts";
OleDbCommand cmd = new OleDbCommand(cmdText, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("AccName", txtAccName.Text.ToString());
//..... other parameters to insert record .....
OleDbCommand cmd = new OleDbCommand(cmdText, conn);
cmd.CommandType = CommandType.StoredProcedure;
OleDbDataReader reader = cmd.ExecuteReader();
BindGrid();
The issue is when you call the BindGrid()
again you have to clear it first:
string cmdText = "prAddAccounts";
OleDbCommand cmd = new OleDbCommand(cmdText, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("AccName", txtAccName.Text.ToString());
//..... other parameters to insert record .....
//Clear the binding.
dtGrdAccounts.DataSource = null;
//Bind the new data.
BindGrid();
这篇关于列计数属性不能在数据绑定的datagridview控件上设置c#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!