I have a DataGrid with data bind from code behind also I have 2 columns for Edit and delete like this
<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>
It add buttons in the 1st two columns. How can I add this from code behind.
Also I have another confusion I bind my DataGrid using the below method
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);
}
}
This Binding method is not working with the following 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>
And the last when I am trying delete record on its clickevent like WinForm its not working
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();
}
}
Sorry for asking too many question at once as these are the problems I am facing shifting from WinForm to WPF.
EDIT : I have tried this: What I have added is
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);
}
And it looks like

XAMLfrom line no-2 butButtonsshould be at the end of data.