Please replace your code behind (Window1.xaml.cs) with following code.
Note: I assume that you are having online.png image added in your project under Image folder.
Second, see that I haven't modify your XAML file, this code will work with your existing xaml file.
I have added view model classes for giving better control on implementing WPF based applications, do check the button event handler modifications and the way DataViewModel is used.
Please try not creating your dataset in xaml.cs, instead get this from some controller class.
public partial class Window1 : Window
{
public DataSet ds;
public DataTable dt;
Window _wd;
public Window1(Window wd)
{
_wd = wd;
InitializeComponent();
dt = new DataTable();
dt.Columns.Add("PO");
dt.Columns.Add("NA");
dt.Columns.Add("GE");
dt.Columns.Add("ST");
dt.Columns.Add("MA");
dt.Columns.Add("ImgPath", typeof(BitmapImage));
DataRow dr = dt.NewRow();
dr[0] = "1";
dr[1] = "SAM";
dr[2] = "Male";
dr[3] = "Offline";
dr[4] = "Comp123";
dr[5] = new BitmapImage(new Uri("/WpfApplication1;component/Images/offline.png", UriKind.RelativeOrAbsolute));
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "2";
dr[1] = "RAM";
dr[2] = "Male";
dr[3] = "Offline";
dr[4] = "Comp124";
dr[5] = new BitmapImage(new Uri("/WpfApplication1;component/Images/offline.png", UriKind.RelativeOrAbsolute));
dt.Rows.Add(dr);
dataViewModel = new DataViewModel(dt);
dataGrid1.ItemsSource = dataViewModel.DataSet;
}
DataViewModel dataViewModel;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
}
private void button1_Click(object sender, RoutedEventArgs e)
{
dataViewModel.SetOnline();
}
}
public class DataViewModel : INotifyPropertyChanged
{
DataTable dt;
ObservableCollection<DataRowViewModel> dataSet;
public ObservableCollection<DataRowViewModel> DataSet
{
get
{
return dataSet;
}
set
{
dataSet = value;
OnPropertyChanged("DataSet");
}
}
public DataViewModel(DataTable dt)
{
this.dt = dt;
this.DataSet = new ObservableCollection<DataRowViewModel>();
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
DataRowViewModel rowViewModel = new DataRowViewModel(dr);
this.DataSet.Add(rowViewModel);
}
}
}
#region INotifyPropertyChanged Members
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
internal void SetOnline()
{
if (dataSet != null)
{
foreach (DataRowViewModel dr in dataSet)
{
dr.SetOnline();
}
}
}
}
public class DataRowViewModel:INotifyPropertyChanged
{
DataRow dr;
public string PO
{
get
{
return dr["PO"].ToString();
}
set
{
dr["PO"] = value;
OnPropertyChanged("PO");
}
}
public string NA
{
get
{
return dr["NA"].ToString();
}
set
{
dr["NA"] = value;
OnPropertyChanged("NA");
}
}
public string GE
{
get
{
return dr["GE"].ToString();
}
set
{
dr["GE"] = value;
OnPropertyChanged("GE");
}
}
public string ST
{
get
{
return dr["ST"].ToString();
}
set
{
dr["ST"] = value;
OnPropertyChanged("ST");
}
}
public string MA
{
get
{
return dr["MA"].ToString();
}
set
{
dr["MA"] = value;
OnPropertyChanged("MA");
}
}
public BitmapImage ImgPath
{
get
{
return dr["ImgPath"] as BitmapImage;
}
set
{
dr["ImgPath"] = value;
OnPropertyChanged("ImgPath");
}
}
public DataRowViewModel(DataRow dr)
{
this.dr = dr;
}
#region INotifyPropertyChanged Members
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
internal void SetOnline()
{
ImgPath = onlineImage;
}
private BitmapImage onlineImage = new BitmapImage(new Uri("/WpfApplication1;component/Images/online.png", UriKind.RelativeOrAbsolute));
}