I am using Caliburn.Micro in my project. I am trying to achieve CRUD operation using Caliburn.Micro . I have done the all part but I am facing problem in Edit data. I wants to add button in my DataGrid in every row so that when ever user click the edit button that row value could be edited and updated in database.
Here is my code
ShellView.xaml
<Button x:Name="ButtonUpdate" Width="100" Height="30" Content="Update"/>
<DataGrid x:Name="Empdata2" AutoGenerateColumns="False" ItemsSource="{Binding Path= Empdata}" SelectedItem="{Binding selecteditem}" Height="162" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding Path=id}"/>
<DataGridTextColumn Header=" First Name" Binding="{Binding Path= fname}"/>
<DataGridTextColumn Header="Last Name" Binding="{Binding Path=lname}"/>
<DataGridTemplateColumn Header="delete">
<DataGridTemplateColumn.CellTemplate >
<DataTemplate >
<Button Content="Delete"
cal:Bind.Model="{Binding DataContext, RelativeSource={RelativeSource AncestorType=DataGrid}}" x:Name="DeleteButton" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Edit">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Edit"
x:Name="EditButton"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
ShellViewModel.cs
public class ShellViewModel : Caliburn.Micro.PropertyChangedBase, IShell
{
private ObservableCollection<Person> _empdata = new ObservableCollection<Person>();
public ObservableCollection<Person> Empdata
{
get { return _empdata; }
set
{
_empdata = value;
NotifyOfPropertyChange(() => Empdata);
}
}
Person model = new Person();
Auth obj = new Auth();
public void ButtonUpdate()
{
try
{
DataSet d = new DataSet();
d = obj.updateuser();
Empdata.Clear();
for (int i = 0; i < d.Tables[0].Rows.Count; i++)
Empdata.Add(new Person
{
id=Convert.ToInt32(d.Tables[0].Rows[i][0]),
fname = d.Tables[0].Rows[i][1].ToString(),
lname = d.Tables[0].Rows[i][2].ToString(),
});
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private Person _selecteditem;
public Person selecteditem
{
get { return _selecteditem; }
set
{
_selecteditem = value;
NotifyOfPropertyChange(() => selecteditem);
}
}
string sel;
public void DeleteButton()
{
Auth obj = new Auth();
sel = selecteditem.fname.ToString();
bool find = obj.deluser(sel);
if (find == true)
{
ButtonUpdate();
}
}
public void EditButton(){
Auth obj = new Auth();
sel = selecteditem.fname.ToString();
ler = selecteditem.lname.ToString();
bool edit = obj.edituser(sel,ler);
if (edit == true)
{
}
}
Person.cs
public class Person:PropertyChangedBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
private string Firstname;
public string fname
{
get { return Firstname; }
set
{
Firstname = value;
NotifyOfPropertyChange(() => fname);
}
}
private string Lastname;
public string lname
{
get { return Lastname; }
set
{
Lastname = value;
NotifyOfPropertyChange(() => lname);
}
}
Auth.cs
public class Auth
{
SqlConnection conn = new SqlConnection(@"Data Source = a; Initial Catalog = ab; Persist Security Info=True;User ID = s; Password=123");
public DataSet updateuser()
{
try
{
conn.Open();
SqlCommand comm = new SqlCommand("Select * from [add]", conn);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(comm);
da.Fill(ds);
conn.Close();
return ds;
}
catch (Exception ex)
{
throw ex;
}
}
public bool deluser(string name)
{
try
{
conn.Open();
SqlCommand comm = new SqlCommand("Delete from [add] where firstname=" + name + "", conn);
comm.ExecuteNonQuery();
conn.Close();
return true;
}
catch(Exception ex)
{
throw ex;
}
}
public bool edituser(string frname,string lrname)
{
try
{
conn.Open();
SqlCommand comm = new SqlCommand("Update [add] set firstname='" + frname + "' where lastname='" + lrname + "'", conn);
comm.ExecuteNonQuery();
conn.Close();
return true;
}
catch (Exception ex)
{
throw ex;
}
}