フォームに 2 つの Datagridview があり、データグリッドビューでセル検証とセル検証イベント ハンドラーを使用しています。セル自体にカーソルを置いたまま、メニュー クリックで新しいファイルを開こうとすると、次のエラー メッセージが表示されます。「Argument out of exception was unhandled by usercode, index was out of range.」
カーソルがセル内にあるときにフォーカスがあり、セルの検証中なので、このエラーが発生しています。
この行は、「Argument out of exception was unhandled by usercode, index was out of range.」というメッセージとともにエラーをスローします。
datagridview.Rows[e.RowIndex].ErrorText = "";
このエラーを回避するにはどうすればよいですか?? または、メニューをクリックして新しいファイルを開くときにフォーカスを削除するにはどうすればよいですか?? ありがとうございました。
private void datagridview_CellValidating(object sender, CellValidatingEventArgs e)
{
if (e.ColumnInfo.Name == "Item1" || e.ColumnInfo.Name == "Item2")
{
datagridview.Rows[e.RowIndex].ErrorText = "";
int newInteger;
if (datagridview.Rows[e.RowIndex].IsModified)
return;
if (!int.TryParse(e.Value.ToString(),
out newInteger) || newInteger < -50000 || newInteger > 50000)
{
e.Cancel = true;
datagridview.Rows[e.RowIndex].ErrorText = "The value must be a non-negative integer";
}
}
}
private void datagridview_CellValidated(object sender, CellValidatedEventArgs e)
{
if (e.ColumnIndex != 3)
return;
int nextRowIndex = e.RowIndex + 1;
int lastRowIndex = datagridview.Rows.Count - 1;
if (nextRowIndex <= lastRowIndex)
{
var value = datagridview.Rows[e.RowIndex].Cells[3].Value.ToString();
datagridview.Rows[nextRowIndex].Cells[2].Value = value;
}
}
MenuItem クリックして新しいファイルを Datagridview に開きます。
private void m_test1_Click_1(object sender, EventArgs e)
{
myconfig = Myconfig.DeserializeFromXmlFile(@"test2.xml");
Display(rseConfig);
m_ConfigPages.Visible = true;
}
private void m_test2_Click(object sender, EventArgs e)
{
myconfig = Myconfig.DeserializeFromXmlFile(@"test2.xml");
Display(myconfig );
m_ConfigPages.Visible = true;
}
DataError Event Hnadler を使用していますが、機能していません。
private void datagridview_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
// Don't throw an exception when we're done.
e.ThrowException = false;
// Display an error message.
string txt = "Error with " +
datagridview.Columns[e.ColumnIndex].HeaderText +
"\n\n" + e.Exception.Message;
MessageBox.Show(txt, "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
// If this is true, then the user is trapped in this cell.
e.Cancel = true;
}
でも、私は行と列のインデックスを持っています:datagridview.Rows[e.RowIndex].Cells[e.ColumnIndex].Value
まだ動作していません。