WPF表格添加行和删除行

WPF表格添加行和删除行

我们处理程序项目往往会涉及多表新增,这是的部分数据就是需要存放到表格中进行多条数据循环新增,那么我们就要给表格添加行来输入需要新增的数据;在HTML我们可以通过添加TR标签添加行,在窗体程序也一样我们就给Table添加Rows();
下面是一个简单的实例:
1、 先定义一个表格,定义好表头的行和列以及绑定的值还有控件,我这里列定义了一个删除按钮,设定好基本属性;代码如下

----------新增行按钮----------
<Button x:Name="btn_InsertBarRows" Content="新增" Background="GreenYellow" Height="30" Width="45" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="10,2,0,1.6" Foreground="White" Grid.ColumnSpan="2" Click="Btn_InsertBarRows_Click"></Button>
----------数据表格----------
<DataGrid x:Name="dgInsertBar" IsReadOnly="False" AutoGenerateColumns="False" Background="white"
                  CanUserResizeColumns="False" CanUserResizeRows="False"  SelectionMode="Single" 
                  CanUserReorderColumns="False" AlternationCount="2"  RowHeaderWidth="0" CanUserAddRows="False"
                        Margin="0,10,1,-26" Height="255" VerticalAlignment="Top" MouseUp="DgInsertBar_MouseUp">
                                <DataGrid.Columns>
                                    <DataGridTextColumn Header="序号" Binding="{Binding Num}" Width="50"></DataGridTextColumn>
                                    <DataGridTextColumn Header="货号" Binding="{Binding CommodityNo}" Width="120"></DataGridTextColumn>
                                    <DataGridTextColumn Header="条码" Binding="{Binding BarCode}" Width="140"></DataGridTextColumn>
                                    <DataGridTemplateColumn Header="删除" Width="40">
                                        <DataGridTemplateColumn.CellTemplate >
                                            <DataTemplate>
                                                <Button x:Name="btn_DeleteCar"  Content="删除" Foreground="Red" Background="Red" Click="Btn_DeleteCar_Click"/>
                                            </DataTemplate>
                                        </DataGridTemplateColumn.CellTemplate>
                                    </DataGridTemplateColumn>
                                </DataGrid.Columns>
                            </DataGrid>

2、 后台代码:

//给表格添加行
int UnitRowIndex=-1; //单位行索引
public DataTable dg; //商品条码表格
        private void Btn_InsertBarRows_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                 //实例化表数据表
                dg = new DataTable();
                //给表添加列,并绑定值以及值得类型(跟页面窗体值对应)                dg.Columns.Add("CommodityNo", typeof(string));
                dg.Columns.Add("BarCode", typeof(int));
                 //判断表格行是否大于0
                if (dgInsertBar.Items.Count > 0)
                {
                    dg = ((DataView)dgInsertBar.ItemsSource).Table;
                    int j = dg.Rows.Count;//获取行数
                    dg.Rows.Add();//添加行
                    dg.Rows[j]["Num"] = j + 1; //给表格自增排序
                }
                else
                {
                    dg.Rows.Add();
                    dg.Rows[0]["Num"] = "1";//默认第一行为序号为1
                 }
                //绑定窗体页面表格
                dgInsertBar.ItemsSource = dg.DefaultView;
            }
            catch (Exception)
            {
                throw;
            }
        }
        //删除条码表格行
        private void Btn_DeleteCar_Click(object sender, RoutedEventArgs e)
        {
            MessageBoxResult dr = MessageBox.Show("是否删除当前条码?", "系统提示", MessageBoxButton.OKCancel, MessageBoxImage.Question);//弹出确定对话框
            if (dr == MessageBoxResult.OK)
            {
                dg.Rows.RemoveAt(BarRowIndex);//移除指定索引的行
            }
            for (int i = 1; i <= dg.Rows.Count;i++)
            {
                dg.Rows[i - 1]["Num"] = i; //重新给表格排序    
            }
//删除行后重新绑定表格
            dgInsertBar.ItemsSource = dg.DefaultView;
        }
        //表格鼠标弹起事件
        private void DgInsertBar_MouseUp(object sender, MouseButtonEventArgs e)
        {
            //判断是否选中
            if (dgInsertBar.SelectedIndex == -1)
            {
             BarRowIndex = Convert.ToInt32(dgInsertBar.SelectedIndex); //获取被选中行索引           
            }
        }
        

页面结果如图所示:
在这里插入图片描述

### 回答1: WPF(Windows Presentation Foundation)是微软公司开发的一种用于创建Windows应用程序的框架。其动态表格缓存功能可以提高应用程序的性能和响应速度。 动态表格缓存是一种机制,用于在WPF应用程序中缓存和重复使用重复性控件的实例,以避免不必要的资源消耗。在创建表格或列表等控件时,WPF会自动判断是否启用动态表格缓存,并根据需要进缓存。当用户滚动表格时,WPF会从缓存中重用复用的控件,而不是每次都创建新的实例。这样可以大大减少内存消耗和渲染时间,提高应用程序的性能。 通过启用动态表格缓存,可以提高大型数据集的显示效率。当数据量较大时,创建和销毁大量的控件实例会对应用程序的运效率产生负面影响。而使用动态表格缓存,只需创建足够数量的控件实例来填充可视区域,然后根据用户滚动的需求动态地重用这些实例。这样不仅减少了控件的创建时间,也避免了频繁创建和销毁控件实例可能引发的内存泄漏问题。 除了提高性能外,动态表格缓存还可以增加用户交互的流畅性。在用户滚动表格时,重用已存在的控件实例可以实现无缝滚动效果,避免了因为频繁创建和销毁控件实例导致的界面烁和不流畅的滚动效果。这为用户提供了更好的视觉体验。 总之,启用WPF动态表格缓存可以提高应用程序的性能和响应速度,减少资源消耗,增加用户交互的流畅性。这是一种高效的优化技术,可适用于需要显示大量数据的WPF应用程序。 ### 回答2: WPF是一种用于创建 Windows 应用程序的技术,可以使用 XAML 和 C# 来构建用户界面。在WPF中,可以通过动态表格缓存来提高性能。 表格WPF中常用的控件之一,用于以表格的形式展示数据。当表格中的数据量很大时,每次对表格操作(如刷新、排序、过滤等)都会引起性能问题,导致用户体验不佳。 为了解决这个问题,WPF引入了动态表格缓存的概念。动态表格缓存是一种机制,用于将表格的数据暂时存储在内存中,以便在多次操作时可以直接从内存中读取数据,而不需要实际重新加载数据。这样可以大大提高表格操作的速度和响应性。 启用动态表格缓存的方法是通过设置表格的属性来实现。可以设置表格的IsVirtualizing属性为True,这将开启表格的虚拟化功能。虚拟化功能使得表格可以只加载正在显示的那部分数据,而不是全部数据,从而减少了内存的占用。此外,还可以设置表格的VirtualizingPanel.VirtualizationMode属性为Recycling,这将启用表格的循环利用机制,进一步提高性能。 值得注意的是,虽然动态表格缓存可以提高表格的性能,但也有一些限制和注意事项。例如,动态表格缓存对于实时更新的数据可能不适用,因为缓存的数据可能无法及时反映出最新的变化。另外,动态表格缓存的性能提升效果也取决于硬件设备的性能和内存大小。 总之,动态表格缓存是WPF中提供的一种优化表格性能的机制。通过启用动态表格缓存,可以有效地提高表格操作的速度和响应性,从而提升用户体验。 ### 回答3: WPF(Windows Presentation Foundation)是一种用于创建富客户端应用程序的技术,它提供了一种用于构建现代、美观和交互式用户界面的方式。动态表格WPF中一种常见的UI元素,它允许用户在运添加删除和编辑表格中的和列。 在WPF中启用动态表格缓存意味着减少表格的滚动时的性能开销。当表格包含大量数据时,滚动可能会变得缓慢,因为WPF需要频繁地重新绘制表格以显示新的和列。启用表格缓存后,WPF会将表格的内容缓存起来,滚动时只需重新绘制可见部分,从而提高滚动的效率。 要启用动态表格缓存,可以使用WPF的VirtualizingStackPanel来作为表格的ItemsPanel。VirtualizingStackPanel是一种特定的布局容器,它只会在需要显示时才生成UI元素,并且会自动回收已经离开可视区域的元素。这样,当用户滚动表格时,只有可见部分的元素会被创建和显示,而不是整个表格。 在XAML中,可以这样启用表格缓存: ``` <DataGrid> <DataGrid.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel /> </ItemsPanelTemplate> </DataGrid.ItemsPanel> </DataGrid> ``` 通过以上设置,WPF会自动将表格的内容进缓存,从而提高表格滚动的性能。 总之,通过启用动态表格缓存,可以提高WPF中动态表格的滚动性能。这对于包含大量数据的表格来说尤为重要,因为它能够减少不必要的UI元素的创建和绘制,提高用户的交互体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值