How to dynamically add a row of data in WPF?

The only example I can think of is html - if you dynamically add TR w / colspan + div inside it containing details (editable) when you click the previous TR, for example

I'm trying to intercept XAML and wanted to see if anyone can point me in the right direction with this stupid request.

+3
source share
1 answer

Here is something, not sure if this is what you are looking for:

XAML:

<Grid Name="_mainGrid">
    <Grid.ColumnDefinitions>
        <!-- Contains the button -->
        <ColumnDefinition Width="Auto"/>
        <!-- Contains the edit control -->
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <!-- So that we have the 'empty' space at the end -->
        <RowDefinition Height="*"/> 
    </Grid.RowDefinitions>
</Grid>

code:

    public Window1()
    {
        InitializeComponent();
        CreateRow(); // Bootstrap
    }

    private void CreateRow()
    {
        RowDefinition newRow = new RowDefinition();
        newRow.Height = new GridLength(0, GridUnitType.Auto);
        _mainGrid.RowDefinitions.Insert(_mainGrid.RowDefinitions.Count - 1, newRow);

        int rowIndex = _mainGrid.RowDefinitions.Count - 2;

        UIElement editControl = CreateEditControl();
        Grid.SetRow(editControl, rowIndex);
        Grid.SetColumn(editControl, 1);
        Grid.SetRowSpan(editControl, 1);
        Grid.SetColumnSpan(editControl, 1); // Change this if you want.
        _mainGrid.Children.Add(editControl);

        Button addButton = new Button();
        addButton.Content = "Add";
        addButton.Click += new RoutedEventHandler(b_Click);
        Grid.SetRow(addButton, rowIndex);
        Grid.SetColumn(addButton, 0);
        _mainGrid.Children.Add(addButton);
        addButton.Tag = editControl;

    }

    void b_Click(object sender, RoutedEventArgs e)
    {
        CreateRow();
        Control button = (Control)sender;
        UIElement editControl = (UIElement)button.Tag;
        _mainGrid.Children.Remove(button);
        Grid.SetColumn(editControl, 0);
        Grid.SetColumnSpan(editControl, 2);
    }

    private UIElement CreateEditControl()
    {
        return new TextBox();
    }
+7
source

Source: https://habr.com/ru/post/1703317/


All Articles