WPF - Показать / Скрыть выбранный столбец с правой кнопкой мыши - PullRequest
0 голосов
/ 05 декабря 2018

Я хочу сделать Показать и Скрыть элемент управления для моей DataGrid в WPF.Я просто хочу добавить 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;

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Вы можете сделать что-то вроде этого

Примечание : Это далеко не идеально, но вы получите представление о том, как вы можете решить свою проблему

Если выбороться с чем-то, дайте мне знать, я пытаюсь помочь тогда

<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;
    }
}
0 голосов
/ 05 декабря 2018

Прежде всего, я не совсем уверен, как можно щелкнуть правой кнопкой мыши столбец, чтобы снова показать его, если он скрыт.

Кроме того, вы можете попробовать что-то подобное для вашего 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...