【发布时间】:2015-08-03 11:56:13
【问题描述】:
我有一个 DataGrid 与后面的代码绑定数据,我还有 2 列用于编辑和删除,像这样
<DataGrid Height="226" HorizontalAlignment="Left" Margin="106,111,0,0" Name="DgEmp" VerticalAlignment="Top" Width="684" ColumnWidth="*" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Actions">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="Delete" Name="BtnDelete" Click="btnDelete_Click"/>
<Button Content="Edit" x:Name="BtnEdit" Click="btnEdit_Click"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
它在第一两列添加按钮。 如何从后面的代码中添加它。
我还有另一个困惑,我使用下面的方法绑定了我的DataGrid
private void GridBind()
{
try
{
using (var con = new SqlConnection(_conString))
{
const string sqlqry = "select ROW_NUMBER() OVER (ORDER BY EmpNo) AS [SlNo],EmpNo,EmpName,Salary,DeptNo from dbo.Employee";
var cmd = new SqlCommand(sqlqry, con);
_adapt = new SqlDataAdapter(cmd);
var dt = new DataTable("Employee");
_adapt.Fill(dt);
DgEmp.ItemsSource = dt.DefaultView;
}
}
catch (Exception ex)
{
MessageBox.Show("Some error encountered" + ex.Message);
}
}
此绑定方法不适用于以下 XAML
<DataGrid Height="226" HorizontalAlignment="Left" Margin="106,111,0,0" Name="DgEmp" VerticalAlignment="Top" Width="684" ColumnWidth="*" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="SL No" Width="*"/>
<DataGridTextColumn Header="Emp No" Width="*"/>
<DataGridTextColumn Header="Emp Name" Width="*" />
<DataGridTextColumn Header="Salary" Width="*" />
<DataGridTextColumn Header="Dept No" Width="*" />
<DataGridTemplateColumn Header="Actions">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="Delete" Name="BtnDelete" Click="btnDelete_Click"/>
<Button Content="Edit" x:Name="BtnEdit" Click="btnEdit_Click"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
当我尝试删除其clickevent 上的记录时,就像 WinForm 一样,它不起作用
private void btnDelete_Click(object sender, RoutedEventArgs e)
{
var id= Convert.ToInt32(DgEmp.Rows[e.RowIndex].Cells[2].Value.ToString());
if(id!=0)
{
// Delete query on basis of id
GridBind();
ClearData();
}
}
很抱歉一次问了太多问题,因为这些是我从WinForm 转移到WPF 时面临的问题。
编辑:我试过这个: 我添加的是
private void Window_Loaded(object sender, RoutedEventArgs e)
{
GridBind();
string colProperty = "Name";
DataGridTextColumn col = new DataGridTextColumn();
col.Binding = new Binding(colProperty);
var spHeader = new StackPanel() { Orientation = Orientation.Horizontal };
spHeader.Children.Add(new TextBlock(new Run(colProperty)));
Button button1 = new Button();
button1.Click += btnEdit_Click;
button1.Content = "Edit";
spHeader.Children.Add(button1);
col.Header = spHeader;
DgEmp.Columns.Add(col);
}
看起来像
【问题讨论】:
-
你需要 2 个按钮,所以最好先尝试添加 2 个按钮,然后再添加到 datagrid。
-
@DeshDeepSingh:我已经完成了,你可以在我的共享
XAML第 2 行找到这个,但Buttons应该在数据的末尾。