簡體   English   中英

無法在數據綁定 datagridview 控件上設置列計數屬性 c#

[英]column count property cannot be set on a databound datagridview control c#

在我的表單中,我有一個 DataGridView。 並控制輸入和輸出數據。 在網格視圖中顯示數據時。 我在兩次調用 BindGrid 。 一個是formload,另一個是在添加新記錄之后。

 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;
                    }
                }
            }
        }
    }

如果我刪除行dtGrdAccounts.ColumnCount = 3; 我得到低於錯誤。 Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

添加新記錄后,在按鈕保存時,我調用 BindGrid() 方法以獲取 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();

問題是當您再次調用BindGrid()時,您必須先清除它:

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 列設計代碼,則必須將 Gridview 數據源設置為 null,如下所示

dataGridView1.DataSource = null;

using (DataTable dt = new DataTable())
                {
                    //add this line of code
                    dtGrdAccounts.DataSource = null;

                    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;
                }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM