DataGridView设置指定单元格为Button按钮

 //设置指定单元格为Button按钮
            this.GridView_SetLayerRule.Controls.Clear(); 
            for (int i = 0; i < GridView_SetLayerRule.Rows.Count; i++)
            {
                System.Windows.Forms.Button btn = new System.Windows.Forms.Button();//创建Buttonbtn  
                string cellVaule = GridView_SetLayerRule.Rows[i].Cells[0].Value.ToString();
                if (cellVaule != "微小线检查规则" && cellVaule != "微小面检查规则") continue;
                
                btn.Text = "设置条件";
                btn.Font = new System.Drawing.Font("宋体", 10);
                btn.Visible = true;
                btn.Width = this.GridView_SetLayerRule.GetCellDisplayRectangle(1, i, true).Width;
                btn.Height = this.GridView_SetLayerRule.GetCellDisplayRectangle(1, i, true).Height;
                this.GridView_SetLayerRule.Controls.Add(btn);
                btn.Location = new System.Drawing.Point(((this.GridView_SetLayerRule.GetCellDisplayRectangle(1, i, true).Right) -
                       (btn.Width)), this.GridView_SetLayerRule.GetCellDisplayRectangle(1, i, true).Y);//设置btn显示位置 
            }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 WPF ,可以通过 DataGrid 的 CellTemplate 属性来自定义单元格的展示方式。同时,可以使用 DataGrid 的 CellEditingTemplate 属性来自定义单元格编辑时的展示方式。 要实现在 DataGrid 的第一列添加一个 Button,点击这个 Button 后第一列的 TextBox 显示为 10086,可以按照以下步骤进行: 1. 在 DataGrid 添加一个 DataGridTemplateColumn 列,指定其 Header 为第一列的标题: ```xml <DataGrid x:Name="MyDataGrid"> <DataGrid.Columns> <DataGridTemplateColumn Header="First Column"> <!-- 这里添加单元格模板和单元格编辑模板 --> </DataGridTemplateColumn> <!-- 添加其他列 --> </DataGrid.Columns> </DataGrid> ``` 2. 在 DataGridTemplateColumn 添加一个 CellTemplate 属性,用于定义单元格的展示方式。在 CellTemplate 添加一个 Button,同时添加一个 TextBlock,这个 TextBlock 用于显示当前单元格的值: ```xml <DataGridTemplateColumn Header="First Column"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Button Content="Set Value" Click="SetValueButton_Click"/> <TextBlock Text="{Binding Path=., Mode=TwoWay}"/> </StackPanel> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> ``` 注意这里的 TextBlock 的绑定方式:`Text="{Binding Path=., Mode=TwoWay}"`。这个绑定方式表示 TextBlock 的 Text 属性绑定到当前单元格的值上,而且是双向绑定的。 3. 在 DataGridTemplateColumn 添加一个 CellEditingTemplate 属性,用于定义单元格编辑时的展示方式。在 CellEditingTemplate 添加一个 TextBox,同时添加一个 Button,这个 Button 用于将 TextBox 的值设置为 10086: ```xml <DataGridTemplateColumn Header="First Column"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Button Content="Set Value" Click="SetValueButton_Click"/> <TextBlock Text="{Binding Path=., Mode=TwoWay}"/> </StackPanel> </DataTemplate> </DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Button Content="Set Value" Click="SetValueButton_Click"/> <TextBox Text="{Binding Path=., Mode=TwoWay}"/> </StackPanel> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn> ``` 注意这里的 TextBox 的绑定方式和 TextBlock 的绑定方式是一样的:`Text="{Binding Path=., Mode=TwoWay}"`。 4. 在 Button 的 Click 事件,将当前单元格的值设置为 10086: ```csharp private void SetValueButton_Click(object sender, RoutedEventArgs e) { var button = sender as Button; var cell = button?.TemplatedParent as DataGridCell; var row = cell?.DataContext as DataRowView; if (row != null) { row[0] = 10086; } } ``` 这个事件处理方法首先获取到当前按钮所在的单元格,然后获取到该单元格所在的行,最后将当前单元格的值设置为 10086。 完整的代码如下: ```xml <DataGrid x:Name="MyDataGrid"> <DataGrid.Columns> <DataGridTemplateColumn Header="First Column"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Button Content="Set Value" Click="SetValueButton_Click"/> <TextBlock Text="{Binding Path=., Mode=TwoWay}"/> </StackPanel> </DataTemplate> </DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Button Content="Set Value" Click="SetValueButton_Click"/> <TextBox Text="{Binding Path=., Mode=TwoWay}"/> </StackPanel> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn> <!-- 添加其他列 --> </DataGrid.Columns> </DataGrid> ``` ```csharp private void SetValueButton_Click(object sender, RoutedEventArgs e) { var button = sender as Button; var cell = button?.TemplatedParent as DataGridCell; var row = cell?.DataContext as DataRowView; if (row != null) { row[0] = 10086; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值