【问题标题】:WPF - Show/Hide Selected Column With Right ClickWPF - 右键单击​​显示/隐藏选定的列
【发布时间】:2018-12-05 17:25:39
【问题描述】:

我想在 WPF 上为我的 DataGrid 制作显示和隐藏控件。我只想添加 2 个按钮(使用 ContextMenu 或其他东西),但我不知道该怎么做。

我只想从我的 DataGrid 中选择一列,当我单击“隐藏”按钮时,它将被隐藏。当我单击“显示”按钮时,它将再次显示。你能帮我解决这个问题吗?谢谢。

这是我的 DataGrid 代码;

gridview1.CanUserDeleteRows = false;
        gridview1.IsReadOnly = true;
        SQLiteConnection baglanti = new SQLiteConnection("Data Source=db/veritabani.s3db");
        baglanti.Open();
        string komut = "SELECT * FROM belgeler";
        SQLiteDataAdapter da = new SQLiteDataAdapter(komut, baglanti);
        DataTable dt = new DataTable();
        da.Fill(dt);
        gridview1.ItemsSource = dt.DefaultView;

【问题讨论】:

标签: c# wpf datagridview datagrid


【解决方案1】:

首先,我不确定如何右键单击一列以在隐藏时再次显示它。

除此之外,您可以为您的 ContextStripMenu 尝试类似的方法,但我不在我的电脑旁,所以我不能确定它是否有效:

private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        ContextMenu contextMenu = new ContextMenu();
        contextMenu.MenuItems.Add(new MenuItem("Hide"));
        contextMenu.MenuItems.Add(new MenuItem("Show"));
        contextMenu.ItemClicked += new ToolStripItemClickedEventHandler(contexMenu_ItemClicked);
        contextMenu.Show(dataGridView1, new Point(e.X, e.Y));

    }
}

这适用于您的事件处理程序:

void contexMenu_ItemClicked(object sender, ToolStripItemClickedEventArgs e) 
{
    int mouseOverColumn = dataGridView1.HitTest(e.X,e.Y).ColumnIndex;
    dataGridView1.Columns[mouseOverColumn].Visible = false;
}

【讨论】:

    【解决方案2】:

    你可以这样做

    注意:这远非完美,但您将了解如何解决您的问题

    如果你遇到什么困难请告诉我,我会尽力提供帮助

    <DataGrid x:Name="dataGrid">
        <DataGrid.Resources>
            <local:VisibilityToBooleanConverter x:Key="VisibilityToBooleanConverter"></local:VisibilityToBooleanConverter>
            <local:BindingProxy x:Key="BindingProxy" Data="{Binding ElementName=dataGrid, Path=Columns}"></local:BindingProxy>
        </DataGrid.Resources>
        <DataGrid.ColumnHeaderStyle>
            <Style TargetType="{x:Type DataGridColumnHeader}">
                <Setter Property="ContextMenu">
                    <Setter.Value>
                        <ContextMenu ItemsSource="{Binding Source={StaticResource BindingProxy}, Path=Data}">
                            <ContextMenu.ItemContainerStyle>
                                <Style TargetType="{x:Type MenuItem}">
                                    <Setter Property="IsCheckable" Value="True"/>
                                    <Setter Property="IsChecked" Value="{Binding Visibility,Converter={StaticResource VisibilityToBooleanConverter}}"/>
                                    <Setter Property="Header" Value="{Binding Header}"/>
                                </Style>
                            </ContextMenu.ItemContainerStyle>
                        </ContextMenu>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGrid.ColumnHeaderStyle>
        ...
    </DataGrid>
    
    public class VisibilityToBooleanConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is Visibility visibility)
            {
                return visibility == Visibility.Visible;
            }
            return false;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is bool boolValue)
            {
                return (boolValue) ? Visibility.Visible : Visibility.Hidden;
            }
            return Visibility.Hidden;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      相关资源
      最近更新 更多