私はdatagridviewでプログラミングをしようとしています。どのような結果が私は欲しいです:これは、次の列(テキストボックス列)に表示する必要があります:datagridview(コンボボックス列)の最初の列をクリックすると、データベースからの値が表示されます。formloadでdatagridviewエラーが発生しました:インデックスが範囲外の例外
私はこの例外を取得しています:
インデックスが範囲外でした。この行で
非負でなければなりません:
DataGridViewComboBoxCell cb = (DataGridViewComboBoxCell)dataGridView1.Rows[e.RowIndex].Cells[0];
e.RowIndexは示し-1の値。
今、私はこのコードに悩まされています。何が問題なのか。誰でも助けてくれますか?
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
dataGridView1.CellValueChanged +=
new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);
dataGridView1.CurrentCellDirtyStateChanged +=
new EventHandler(dataGridView1_CurrentCellDirtyStateChanged);
}
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (this.dataGridView1.IsCurrentCellDirty)
{
// This fires the cell value changed handler below
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
DataGridViewComboBoxCell cb = (DataGridViewComboBoxCell)dataGridView1.Rows[e.RowIndex].Cells[0];
// ******** e.rowindex shows -1 value.
if (cb.Value != null)
{
con.Open();
SqlCommand cmd = new SqlCommand("select rate FROM Ratemaster where Packagetype = '" + comboBox1.Text +
"' AND Tickettype ='" + ComboboxColumn.Selected + "' ", con);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
dataGridView1.Rows[0].Cells[1].Value = dr[0].ToString();
//dataGridView1.Rows[e.RowIndex].Cells[1].Value = "hi";
}
else
{
//txtRate.Text = "0";
}
con.Close();
}
}
あなたの提案のお友達に感謝します。しかし、私はfoo()とbar()によって何を意味するのか分からなかった。私がプログラミングに新しいので、私は完全に理解できませんでした。あなたはあなたの答えを精緻化できますか? –
こんにちは、fooとbar、特に連結された単語foobarはあなたが想像できるコードの共通のプレースホルダです。私はあなたが自分のコードでif節に反応し、elseパスを無視するべきだと表現したいと思います。ですから、あなたはそういうことをします: – kurdy
@ V.Vaibhav多くの時間、プログラマーは例を示すために 'foo'と' bar'または 'foobar'という言葉を使います。上記は基本的に 'if(e.RowIndex> = 0)'として何かを行います。 '' foo(); 'が何か(あなたのコードで何をしたいのか、' 'foo()'を置き換えてください。同じことがコードのelse部分にも当てはまります。 –