CellContentClick löst ArgumentOutOfRangeException aus, wenn der Benutzer auf die Spaltenüberschrift klickt

CellContentClick löst ArgumentOutOfRangeException aus, wenn der Benutzer auf die Spaltenüberschrift klickt

Problem

In einem WinForm-Projekt verwenden Sie ein DataGridView-Steuerelement und behandeln das CellContentClick-Ereignis. Wenn der Benutzer auf die Spaltenüberschrift klickt, wird die folgende Ausnahme ausgelöst:

Das Problem besteht darin, dass, wenn der Benutzer auf die Spaltenüberschrift klickt, das CellContentClick-Ereignis ausgelöst wird und der Wert von DataGridViewCellEventsArg.RowIndex -1 ist. In Ihrem CellContentClick-Handler verwenden Sie den RowIndex-Wert, um ein Array zu indizieren. Daher die Index-Out-of-Range-Ausnahme.

Lösung

Überprüfen Sie in Ihrem CellContentClick-Ereignishandler, ob sie auf die Spaltenüberschrift geklickt und nichts getan haben, wie folgt:

private void dataGrid_OnCellContentClick(object sender, DataGridViewCellEventArgs e)
{
	var grid = (DataGridView)sender;

	if (e.RowIndex < 0)
	{
		return;
	}

	if (grid[e.ColumnIndex, e.RowIndex] is DataGridViewLinkCell linkCell)
	{
		var linkUrl = linkCell.Value.ToString();
		//Open link in browser
	}
}
Code language: C# (cs)