DataGridViewCellContextMenuStripNeededEventArgs Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет данные о событии CellContextMenuStripNeeded.
public ref class DataGridViewCellContextMenuStripNeededEventArgs : System::Windows::Forms::DataGridViewCellEventArgs
public class DataGridViewCellContextMenuStripNeededEventArgs : System.Windows.Forms.DataGridViewCellEventArgs
type DataGridViewCellContextMenuStripNeededEventArgs = class
inherit DataGridViewCellEventArgs
Public Class DataGridViewCellContextMenuStripNeededEventArgs
Inherits DataGridViewCellEventArgs
- Наследование
Примеры
В следующем примере кода класс используется DataGridViewCellContextMenuStripNeededEventArgs для задания контекстного меню без отмены совместного использования строки.
ToolStripMenuItem^ wholeTable;
ToolStripMenuItem^ lookUp;
System::Windows::Forms::ContextMenuStrip^ strip;
String^ cellErrorText;
void dataGridView1_CellContextMenuStripNeeded( Object^ /*sender*/,
DataGridViewCellContextMenuStripNeededEventArgs^ e )
{
cellErrorText = String::Empty;
if ( strip == nullptr )
{
strip = gcnew System::Windows::Forms::ContextMenuStrip;
lookUp->Text = L"Look Up";
wholeTable->Text = L"See Whole Table";
strip->Items->Add( lookUp );
strip->Items->Add( wholeTable );
}
e->ContextMenuStrip = strip;
}
void wholeTable_Click( Object^ /*sender*/, EventArgs^ /*e*/ )
{
dataGridView1->DataSource = Populate( L"Select * from employees", true );
}
DataGridViewCellEventArgs^ theCellImHoveringOver;
void dataGridView1_CellMouseEnter( Object^ /*sender*/, DataGridViewCellEventArgs^ e )
{
theCellImHoveringOver = e;
}
DataGridViewCellEventArgs^ cellErrorLocation;
void lookUp_Click( Object^ /*sender*/, EventArgs^ /*e*/ )
{
try
{
dataGridView1->DataSource = Populate( String::Format( L"Select * from employees where {0} = '{1}'", dataGridView1->Columns[ theCellImHoveringOver->ColumnIndex ]->Name, dataGridView1->Rows[ theCellImHoveringOver->RowIndex ]->Cells[ theCellImHoveringOver->ColumnIndex ]->Value ), true );
}
catch ( ... )
{
cellErrorText = L"Can't look this cell up";
cellErrorLocation = theCellImHoveringOver;
}
}
void dataGridView1_CellErrorTextNeeded( Object^ /*sender*/, DataGridViewCellErrorTextNeededEventArgs^ e )
{
if ( cellErrorLocation != nullptr )
{
if ( e->ColumnIndex == cellErrorLocation->ColumnIndex && e->RowIndex == cellErrorLocation->RowIndex )
{
e->ErrorText = cellErrorText;
}
}
}
DataTable^ Populate( String^ query, bool resetUnsharedCounter )
{
if ( resetUnsharedCounter )
{
ResetCounter();
}
// Alter the data source as necessary
SqlDataAdapter^ adapter = gcnew SqlDataAdapter( query,
gcnew SqlConnection( L"Integrated Security=SSPI;Persist Security Info=False;"
L"Initial Catalog=Northwind;Data Source= localhost" ) );
DataTable^ table = gcnew DataTable;
adapter->Fill( table );
return table;
}
Label^ count;
int unsharedRowCounter;
void ResetCounter()
{
unsharedRowCounter = 0;
count->Text = unsharedRowCounter.ToString();
}
private ToolStripMenuItem wholeTable = new ToolStripMenuItem();
private ToolStripMenuItem lookUp = new ToolStripMenuItem();
private ContextMenuStrip strip;
private string cellErrorText;
private void dataGridView1_CellContextMenuStripNeeded(object sender,
DataGridViewCellContextMenuStripNeededEventArgs e)
{
cellErrorText = String.Empty;
if (strip == null)
{
strip = new ContextMenuStrip();
lookUp.Text = "Look Up";
wholeTable.Text = "See Whole Table";
strip.Items.Add(lookUp);
strip.Items.Add(wholeTable);
}
e.ContextMenuStrip = strip;
}
private void wholeTable_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = Populate("Select * from employees", true);
}
private DataGridViewCellEventArgs theCellImHoveringOver;
private void dataGridView1_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
theCellImHoveringOver = e;
}
private DataGridViewCellEventArgs cellErrorLocation;
private void lookUp_Click(object sender, EventArgs e)
{
try
{
dataGridView1.DataSource = Populate("Select * from employees where " +
dataGridView1.Columns[theCellImHoveringOver.ColumnIndex].Name + " = '" +
dataGridView1.Rows[theCellImHoveringOver.RowIndex].
Cells[theCellImHoveringOver.ColumnIndex].Value + "'",
true);
}
catch (SqlException)
{
cellErrorText = "Can't look this cell up";
cellErrorLocation = theCellImHoveringOver;
}
}
private void dataGridView1_CellErrorTextNeeded(object sender,
DataGridViewCellErrorTextNeededEventArgs e)
{
if (cellErrorLocation != null)
{
if (e.ColumnIndex == cellErrorLocation.ColumnIndex &&
e.RowIndex == cellErrorLocation.RowIndex)
{
e.ErrorText = cellErrorText;
}
}
}
private DataTable Populate(string query, bool resetUnsharedCounter)
{
if (resetUnsharedCounter)
{
ResetCounter();
}
// Alter the data source as necessary
SqlDataAdapter adapter = new SqlDataAdapter(query,
new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;" +
"Initial Catalog=Northwind;Data Source=localhost"));
DataTable table = new DataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
adapter.Fill(table);
return table;
}
private Label count = new Label();
private int unsharedRowCounter;
private void ResetCounter()
{
unsharedRowCounter = 0;
count.Text = unsharedRowCounter.ToString();
}
Private WithEvents wholeTable As New ToolStripMenuItem()
Private WithEvents lookUp As New ToolStripMenuItem()
Private strip As ContextMenuStrip
Private cellErrorText As String
Private Sub dataGridView1_CellContextMenuStripNeeded(ByVal sender As Object, _
ByVal e As DataGridViewCellContextMenuStripNeededEventArgs) _
Handles dataGridView1.CellContextMenuStripNeeded
cellErrorText = String.Empty
If strip Is Nothing Then
strip = New ContextMenuStrip()
lookUp.Text = "Look Up"
wholeTable.Text = "See Whole Table"
strip.Items.Add(lookUp)
strip.Items.Add(wholeTable)
End If
e.ContextMenuStrip = strip
End Sub
Private Sub wholeTable_Click(ByVal sender As Object, ByVal e As EventArgs) Handles wholeTable.Click
dataGridView1.DataSource = Populate("Select * from employees", True)
End Sub
Private theCellImHoveringOver As DataGridViewCellEventArgs
Private Sub dataGridView1_CellMouseEnter(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs) _
Handles dataGridView1.CellMouseEnter
theCellImHoveringOver = e
End Sub
Private cellErrorLocation As DataGridViewCellEventArgs
Private Sub lookUp_Click(ByVal sender As Object, ByVal e As EventArgs) Handles lookUp.Click
Try
dataGridView1.DataSource = Populate("Select * from employees where " & _
dataGridView1.Columns(theCellImHoveringOver.ColumnIndex).Name & " = '" & _
dataGridView1.Rows(theCellImHoveringOver.RowIndex).Cells(theCellImHoveringOver.ColumnIndex).Value.ToString() & _
"'", True)
Catch ex As SqlException
cellErrorText = "Can't look this cell up"
cellErrorLocation = theCellImHoveringOver
End Try
End Sub
Private Sub dataGridView1_CellErrorTextNeeded(ByVal sender As Object, _
ByVal e As DataGridViewCellErrorTextNeededEventArgs) _
Handles dataGridView1.CellErrorTextNeeded
If (Not cellErrorLocation Is Nothing) Then
If e.ColumnIndex = cellErrorLocation.ColumnIndex AndAlso _
e.RowIndex = cellErrorLocation.RowIndex Then
e.ErrorText = cellErrorText
End If
End If
End Sub
Private Function Populate(ByVal query As String, ByVal resetUnsharedCounter As Boolean) As DataTable
If resetUnsharedCounter Then
ResetCounter()
End If
' Alter the data source as necessary
Dim adapter As New SqlDataAdapter(query, _
New SqlConnection("Integrated Security=SSPI;Persist Security Info=False;" & _
"Initial Catalog=Northwind;Data Source=localhost"))
Dim table As New DataTable()
table.Locale = System.Globalization.CultureInfo.InvariantCulture
adapter.Fill(table)
Return table
End Function
Private count As New Label()
Private unsharedRowCounter As Integer
Private Sub ResetCounter()
unsharedRowCounter = 0
count.Text = unsharedRowCounter.ToString()
End Sub
Комментарии
Событие CellContextMenuStripNeeded происходит только в том случае, если DataGridView свойство элемента управления DataSource задано или его VirtualMode свойство true.
При обработке CellContextMenuStripNeeded события контекстное меню, указанное в обработчике, отображается всякий раз, когда пользователь щелкает ячейку правой кнопкой мыши. Это полезно при отображении контекстных меню, определенных текущим состоянием или значением ячейки.
Событие CellContextMenuStripNeeded также происходит всякий раз, когда значение DataGridViewCell.ContextMenuStrip свойства извлекается программным способом или когда пользователь щелкает ячейку правой кнопкой мыши.
Для определения состояния или значения ячейки можно использовать ColumnIndex свойства и RowIndex использовать эти сведения для задания ContextMenuStrip свойства. Это свойство инициализируется со значением свойства ячейки ContextMenuStrip , которое переопределяет значение события.
CellContextMenuStripNeeded Обработайте событие при работе с большими объемами данных, чтобы избежать штрафов за производительность задания значения ячейки ContextMenuStrip для нескольких ячеек. Дополнительные сведения см. в рекомендациях по масштабированию элемента управления DataGridView в Windows Forms.
Кроме того, можно указать контекстное меню для отдельных строк, а не отдельных ячеек, задав свойство строки ContextMenuStrip или обрабатывая DataGridView событие элемента управления RowContextMenuStripNeeded . Параметр свойства ячейки ContextMenuStrip переопределяет параметр свойства строки ContextMenuStrip , а CellContextMenuStripNeeded событие переопределяет как событие, так RowContextMenuStripNeeded и параметр свойства строки ContextMenuStrip . Однако можно указать null контекстное меню ячейки, чтобы запретить переопределение контекстного меню строк.
Дополнительные сведения об обработке событий см. в разделе "Обработка и создание событий".
Конструкторы
| Имя | Описание |
|---|---|
| DataGridViewCellContextMenuStripNeededEventArgs(Int32, Int32) |
Инициализирует новый экземпляр класса DataGridViewCellContextMenuStripNeededEventArgs. |
Свойства
| Имя | Описание |
|---|---|
| ColumnIndex |
Возвращает значение, указывающее индекс столбца ячейки, для которой происходит событие. (Унаследовано от DataGridViewCellEventArgs) |
| ContextMenuStrip |
Возвращает или задает контекстное меню ячейки, вызвавшее CellContextMenuStripNeeded событие. |
| RowIndex |
Возвращает значение, указывающее индекс строки ячейки, для которой происходит событие. (Унаследовано от DataGridViewCellEventArgs) |
Методы
| Имя | Описание |
|---|---|
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Применяется к
См. также раздел
- DataGridView
- CellContextMenuStripNeeded
- DataSource
- VirtualMode
- OnCellContextMenuStripNeeded(DataGridViewCellContextMenuStripNeededEventArgs)
- DataGridViewCellContextMenuStripNeededEventHandler
- ContextMenuStrip
- ContextMenuStrip
- RowContextMenuStripNeeded
- ContextMenuStrip
- ContextMenuStrip
- Рекомендации по масштабированию элемента управления DataGridView в Windows Forms