我有一个Syncfusion的GridGroupingControl。我想对列进行自定义操作,说一个自定义的"隐藏列"。
有一种方法可以识别右单击(我以途中显示上下文菜单)上的列名时的列名,
我有一个 *contextMenustrip_open *,但它没有带来有关该列的任何信息。我也有 * mygrid_tablecontrolcellcellclick *,但仅在单元格上,仅在> left 上单击...
好吧,认为它
int selected_colum; // "selected_colum " need be a global var
private void dtg_contatos_MouseDown(object sender, MouseEventArgs e)
{
try
{
if (e.Button == MouseButtons.Right)
{
dtg_contatos.ClearSelection();
var hti = dtg_contatos.HitTest(e.X, e.Y);
dtg_contatos.Columns[hti.ColumnIndex].Selected = true;
selected_colum = hti.ColumnIndex; // here you set to global var de colum to use at contextmenustrip click
dtg_contatos.Columns[selected_colum].Visible = false; // this you will place at contextmenustrip to hide the column
}
}
catch
{
}
}
您可以在GridGroupingControl上处理tablecontrolmousedown事件,检查正确的鼠标按钮,然后从鼠标事件位置获取columnDescriptor,然后保存列名称(也许可以显示headerText以显示显示在菜单中):
this.gridGroupingControl1.TableControlMouseDown += gridGroupingControl1_TableControlMouseDown;
private string rightClickCol;
void gridGroupingControl1_TableControlMouseDown(object sender, Syncfusion.Windows.Forms.Grid.Grouping.GridTableControlMouseEventArgs e)
{
if (e.Inner.Button == System.Windows.Forms.MouseButtons.Right)
{
rightClickCol = string.Empty;
Syncfusion.Windows.Forms.Grid.Grouping.GridColumnDescriptor columnDescriptor =
gridGroupingControl1.TableControl.GetHeaderColumnDescriptorAt(e.Inner.Location);
if (columnDescriptor != null)
rightClickCol = columnDescriptor.Name;
}
}
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
if (!string.IsNullOrEmpty(rightClickCol))
{
hideColumnToolStripMenuItem.Text = "Hide " + rightClickCol;
hideColumnToolStripMenuItem.Enabled = true;
}
else
{
hideColumnToolStripMenuItem.Text = "Hide Column";
hideColumnToolStripMenuItem.Enabled = false;
}
}
private void hideColumnToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(rightClickCol))
gridGroupingControl1.TableDescriptor.VisibleColumns.Remove(rightClickCol);
}