【问题标题】:Can't create customized table无法创建自定义表
【发布时间】:2019-01-03 21:05:47
【问题描述】:

我想创建一个表格,我可以在其中动态添加文本框类型的行和列或通过用户输入。

然后我尝试使用表格,但现在我只能控制行而不是列。

        table1 = new Table();
        TextBox tbx = new TextBox();
        TableRow row = new TableRow();

        trg1.Rows.Add(row);
        Paragraph para = new Paragraph();
        para.Inlines.Add(tbx);
        TableCell cell = new TableCell(para);
        row.Cells.Add(cell);                                                    

我尝试在 wpf 中的 DataGrid 上执行此操作,但我只能控制列数而不是行数。

          myGrid.Columns.Clear();

           ObservableCollection<EmptyCell> collection = new ObservableCollection<EmptyCell>();
       for (int i = 0; i < 4; i++) {

            DataGridTemplateColumn dtg = new DataGridTemplateColumn();
            dtg.CanUserResize = true;
            dtg.IsReadOnly = false;
            dtg.CellTemplate = getDataTemplate();

            myGrid.CanUserAddRows = true;
            myGrid.ItemsSource = collection; 
            myGrid.Columns.Add(dtg);
        }
   }
    private static DataTemplate getDataTemplate()
    {
        DataTemplate template = new DataTemplate();
        FrameworkElementFactory factory = new FrameworkElementFactory(typeof(TextBox));
        factory.SetValue(TextBox.TextAlignmentProperty, TextAlignment.Right);
      template.VisualTree = factory;

        return template;
    }

【问题讨论】:

  • 我通常使用DataTable。 DataTable 可以动态创建,行可以动态添加。 DataTable 可以用作控件的 DataSource 或绑定。
  • 就是这样,我不想绑定它。它必须像写字板中的表格一样为空。
  • 解释得更好。你的评论完全没有意义。你怎么能绑定到空的东西上?我假设你的意思是一个空的数据表。您可以在 DataTable 中动态创建列,然后根据需要添加行。
  • 我的意思是,正如您在上面的代码中看到的那样,我将每个单元格都设为了一个文本框。没有数据开始。我正在创建的表将接受用户的输入,甚至不必保存它。
  • 对于任何表格或网格,您一次添加一行。最后一行是输入新数据的地方。表单 DataGridView 有一个允许编辑的选项,当设置该属性时,当新数据输入到前一个最后一行时,会创建一个新的空白行。

标签: c# wpf datagrid


【解决方案1】:

最好的方法是使用二维数组作为数据源,并将其绑定到 itemsControl(用于行),该ItemsControl 在其ItemTemplate(用于列)中嵌入了ItemsControl

使用这种解决方案,您只需添加到二维数组并重新绑定即可添加额外的行/列(如果它不是基于INotifyColectionChanged 数据数据结构)

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    相关资源
    最近更新 更多