0

次のコード(まったく同じ)は、別のプロジェクトで正常に実行されています。

 private void AddComboBoxCells()
        {
            DataGridViewComboBoxCell dgvcell;
            _query = "select ProductName from Product";
                com = new SqlCommand(_query, con);
                    for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                    {
                        dgvcell = new DataGridViewComboBoxCell();
                        dataGridView1[1, i] = dgvcell;
                        myrdr = com.ExecuteReader();
                        while (myrdr.Read())
                        {
                            dgvcell.Items.Add(myrdr.GetValue(0));
                        }
                        myrdr.Close();
                    }

        }

このプロジェクトでは現在、これと同じコードを実行しようとしていますが、実行時に次のエラーが発生します。

ここに画像の説明を入力してください

私がしているのは、レコード、つまり製品名を取得して、datagridviewcomboboxcellの2番目の列に入力することです。

編集

 private void btnAdd_Click(object sender, EventArgs e)
    {
        DataRow dtr = tblOrders.NewRow();
        tblOrders.Rows.Add(dtr);
        DataGridViewComboBoxCell dgvcell;
        _query = "select * from Product";
        com = new SqlCommand(_query, con);
            dgvcell = new DataGridViewComboBoxCell();
            dataGridView1[1, dataGridView1 .Rows.Count -2 ] = dgvcell;
            myrdr = com.ExecuteReader();
            while (myrdr.Read())
            {
                dgvcell.Items.Add(myrdr[0]);
            }
            myrdr.Close();
    }

この[追加]ボタンコードは機能するため、受信するデータは確実に有効です。手伝ってください。

4

2 に答える 2

2

2 番目のプロジェクトに有効なデータはありますか? あなたの呼び出しは、ある時点で null (または他の偽の値) を返していると思いますか?myrdr.GetValue(0)

于 2012-10-31T14:55:45.980 に答える
2

まず、DataGridView コントロールの DataError イベントにハンドラーをアタッチして、取得しているエラーに関する詳細情報にアクセスすることができます。

次に、2 番目のプロジェクトで使用しているデータ コンテキストを確認する必要があります。必ずしもプログラミング エラーではなく、クエリを実行したり、データ バインディングを実行したりする基になるデータに関連する問題に似ている可能性が非常に高いようです。

クエリによって返されるデータの種類を調べることができますselect ProductName from Product

見てくださいmyrdr.getValue(0)-次のように行を書き直してくださいdgvcell.Items.Add(myrdr.GetValue(0));

object val = myrdr.GetValue(0);  
dgvcell.Items.Add(val);         // put a break-point here and check val

編集

DataError イベントの処理方法に関する質問に答えるには、'dataGridView1' オブジェクトのイベント メンバーにハンドラーをアタッチするだけです (イベントとは何か、またはハンドラーをイベントにアタッチする方法がわからない場合)。 C#の場合は、オンラインでそれについて読むことをお勧めします-どこにでもたくさんのリソースがあります)

// you will want to add this code to attach the handler in your initialization code - maybe in the Load event handler
dataGridView1.DataError += new DataGridViewDataErrorEventHandler(DataGridView1);

// ....

// an then define this function somewhere in your class to handle the event
private void DataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs anError)
{
     // this function will be called when an error occurs.
     //  you can then use the anError paramenter to get insight into the type and cause of the error
}
于 2012-10-31T14:50:56.140 に答える