Lỗi NullReferenceException khi sửa dữ liệu trong datagridview

Chào các anh chị:
Em đang học winform c#, khi học về datagridview và đổ dữ liệu vào từ database sử dụng linq.
Khi sửa 1 ô trong datagridview thì em bị lỗi :
System.NullReferenceException: Object reference not set to an instance of an object.

Lý do là khi có ô dữ liệu trống thì sẽ xuất hiện lỗi trên do không chuyển sang kiểu string được nên để sửa lỗi này, em thêm dòng code này vào:

if (dgv1.SelectedCells[0].OwningRow.Cells["state"].Value.ToString() == null)
            edit.state = null;
         else
            edit.state = dgv1.SelectedCells[0].OwningRow.Cells["state"].Value.ToString();
Để kiểm tra nếu ô state có trống hay không, nếu trống thì sẽ gán edit.State = null. Nhưng vẫn bị lỗi, khi chạy debug thì hàm dgv1.SelectedCells[0].OwningRow.Cells["state"].Value.ToString() có value

Anh chị giúp em sửa lỗi này

Source Code:

using (QuanLyKhachSanDataContext db = new QuanLyKhachSanDataContext())
  {
       
          string id = dgv1.SelectedCells[0].OwningRow.Cells["id"].Value.ToString();
          string Name = dgv1.SelectedCells[0].OwningRow.Cells["name"].Value.ToString();
          
          string Address = dgv1.SelectedCells[0].OwningRow.Cells["address"].Value.ToString();

         //string State = dgv1.SelectedCells[0].OwningRow.Cells["state"].Value.ToString();

          s_customer edit = db.s_customers.Where(p => p.id.Equals(id) == true).Single();

          edit.id = id;
          edit.name = Name;
          edit.address = Address;
          
         if (dgv1.SelectedCells[0].OwningRow.Cells["state"].Value.ToString() == null)
            edit.state = "null";
         else
            edit.state = dgv1.SelectedCells[0].OwningRow.Cells["state"].Value.ToString();

         
          db.SubmitChanges();

          dgv1.DataSource = from u in db.s_customers
                                          select u;
  }

Mình tìm được cách sửa lỗi:
thay vì dùng hàm ToString() thì dùng hàm Convert.ToString().

hàm ToString() không xử lý khi chuyển chuỗi null còn hàm Convert.ToString() thì xử lý cả chuỗi null nữa

thay vì dùng dgv1.SelectedCells[0].OwningRow.Cells["state"].Value.ToString()
bạn dùng (string)dgv1.SelectedCells[0].OwningRow.Cells["state"].Value

Liệu có tác dụng không?

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?