Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Lỗi "there is no row at position 4" trong listview

  1. #1
    Ngày gia nhập
    12 2010
    Nơi ở
    tphcm
    Bài viết
    35

    Mặc định Lỗi "there is no row at position 4" trong listview

    Lỗi cập nhật dữ liệu
    Tôi có 7 phiếu mượn, lúc đầu bấm nút “Cập nhật” thì nó làm bình thường nhưng khi xóa phiếu số 5 thì chỉ phiếu từ 1 đến 4 là cập nhật được, còn phiếu 6,7 thì nó báo lỗi:
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		loi.jpg
Lần xem:	6
Size:		89.8 KB
ID:		8178
    các bạn góp ý giúp
    Table Phieumuonsach(maphieumuon,ngaymuon,madocgia) với maphieumuon, madocgia là int
    Visual C# Code:
    1. //lớp phieumuon
    2.  
    3. using System.Data;
    4. namespace QLThuVien_lamlai
    5. {
    6.    class PhieuMuon
    7.    {
    8.       Database db;      
    9.       DataTable dg_dt;
    10.       DataTable pm_dt;
    11.  
    12.      
    13.       DocGia dg;
    14.       public PhieuMuon()
    15.       {
    16.          db = new Database(frmMDI.svrName,frmMDI.dbName,frmMDI.intergratedMode,frmMDI.usrName,frmMDI.pwd);
    17.        
    18.          dg = new DocGia();
    19.  
    20.        
    21.          dg_dt = dg.LayDanhSachDocGia();
    22.          
    23.  
    24.       }
    25.  
    26.      
    27.       public DataTable LayDanhSachPhieuMuon()
    28.       {
    29.          pm_dt = db.Execute("select maphieumuon,pm.ngaymuon,dg.hotendocgia"+" from phieumuonsach pm,docgia dg"+" where dg.madocgia=pm.madocgia");
    30.          return pm_dt;
    31.       }
    32.       public bool ThemPhieuMuon(string ngaymuon,int index_dg)
    33.       {
    34.          DataTable dt;
    35.          dt = db.Execute("select maphieumuon from phieumuonsach where maphieumuon >= all(select maphieumuon from phieumuonsach)");
    36.          int MaPM;
    37.          MaPM = (int)dt.Rows[0][0] + 1;
    38.          string str;
    39.          str = "insert into phieumuonsach values(" + MaPM.ToString() + ",'" + ngaymuon + "',"+dg_dt.Rows[index_dg]["madocgia"].ToString()+")";
    40.          db.ExecuteNonQuery(str);
    41.          LayDanhSachPhieuMuon();
    42.          return true;
    43.       }
    44.       public bool XoaPhieuMuon(int index)
    45.       {
    46.          string str;
    47.          str = "delete from phieumuonsach where maphieumuon=" + pm_dt.Rows[index]["maphieumuon"].ToString();
    48.          db.ExecuteNonQuery(str);
    49.  
    50.          
    51.  
    52.          pm_dt.Rows.RemoveAt(index);
    53.          return true;
    54.       }
    55.  
    56.       public void CapNhatPhieuMuon(int index, string ngaymuon, int index_dg)
    57.       {
    58.          string str;
    59.          str = "update phieumuonsach set ngaymuon='" + ngaymuon + "',madocgia=" + dg_dt.Rows[index]["madocgia"].ToString() + " where maphieumuon=" + pm_dt.Rows[index]["maphieumuon"].ToString();
    60.          db.ExecuteNonQuery(str);
    61.          LayDanhSachPhieuMuon();
    62.       }
    63.    }
    64. }
    65. //code frmChoMuonSach
    66.  
    67.  
    68. namespace QLThuVien_lamlai
    69. {
    70.    public partial class frmChoMuonSach : Form
    71.    {      
    72.       DocGia dg;
    73.       PhieuMuon pm;
    74.  
    75.       public frmChoMuonSach()
    76.       {
    77.          InitializeComponent();
    78.          dg = new DocGia();
    79.          pm = new PhieuMuon();
    80.       }
    81.  
    82.       private void HienThiDanhSachDocGia()
    83.       {
    84.          DataTable dt = dg.LayDanhSachDocGia();
    85.  
    86.          int i;
    87.          string str;
    88.          for (i = 0; i < dt.Rows.Count; i++)
    89.          {
    90.             str = dt.Rows[i]["hoTendocgia"].ToString();
    91.             cboDocGia.Items.Add(str);
    92.          }
    93.          if (cboDocGia.Items.Count > 0)
    94.             cboDocGia.SelectedIndex = 0;
    95.       }
    96.  
    97.       private void HienThiDanhSachPhieuMuon()
    98.       {
    99.          lvPhieuMuon.FullRowSelect = true;
    100.          lvPhieuMuon.Items.Clear();
    101.          DataTable dt = pm.LayDanhSachPhieuMuon();
    102.  
    103.          int i;
    104.          string str;
    105.          
    106.          for (i = 0; i < dt.Rows.Count; i++)
    107.          {
    108.             ListViewItem lvi;
    109.             lvi = lvPhieuMuon.Items.Add((i + 1).ToString());
    110.  
    111.             str = dt.Rows[i]["hotendocgia"].ToString();
    112.             lvi.SubItems.Add(str);
    113.  
    114.             lvi.SubItems.Add(Convert.ToDateTime(dt.Rows[i]["ngaymuon"].ToString()).ToShortDateString());
    115.  
    116.             str = dt.Rows[i]["maphieumuon"].ToString();
    117.             lvi.SubItems.Add(str);
    118.            
    119.          }
    120.          lblTong.Text = dt.Rows.Count.ToString();
    121.       }
    122.       private void frmChoMuonSach_Load(object sender, EventArgs e)
    123.       {
    124.          HienThiDanhSachDocGia();
    125.          HienThiDanhSachPhieuMuon();
    126.       }
    127.  
    128.       private void HienThiThongTinChiTiet(int index)
    129.       {
    130.          DataTable dt;
    131.          dt = pm.LayDanhSachPhieuMuon();
    132.                  
    133.          dateTimePickerNgayMuon.Value = (DateTime)dt.Rows[index]["Ngaymuon"];
    134.  
    135.          cboDocGia.SelectedIndex = cboDocGia.FindString(lvPhieuMuon.Items[index].SubItems[1].Text);
    136.          
    137.       }
    138.  
    139.       private void lvPhieuMuon_SelectedIndexChanged(object sender, EventArgs e)
    140.       {
    141.          if (lvPhieuMuon.SelectedIndices.Count > 0)
    142.             HienThiThongTinChiTiet(lvPhieuMuon.SelectedIndices[0]);
    143.       }
    144.  
    145.      
    146.  
    147.       private void SoanLai()
    148.       {
    149.          dateTimePickerNgayMuon.Value = DateTime.Today;
    150.  
    151.          cboDocGia.SelectedIndex = 0;
    152.          
    153.       }
    154.  
    155.       private void btnThem_Click(object sender, EventArgs e)
    156.       {
    157.          pm.ThemPhieuMuon(dateTimePickerNgayMuon.Value.ToShortDateString(),cboDocGia.SelectedIndex);        
    158.          HienThiDanhSachPhieuMuon();
    159.          MessageBox.Show("Phiếu mượn của đọc giả "+cboDocGia.SelectedItem.ToString()+" đã được thêm thành công", "Thông bao", MessageBoxButtons.OK, MessageBoxIcon.Information);
    160.          SoanLai();
    161.       }
    162.  
    163.       private void btnXoa_Click(object sender, EventArgs e)
    164.       {
    165.          if (lvPhieuMuon.SelectedIndices.Count > 0)
    166.          {
    167.  
    168.             if (MessageBox.Show("Bạn có chắc chắn là muốn xóa phiếu mượn của đọc giả '" + cboDocGia.SelectedItem.ToString() + "' không?", "Hỏi lại", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
    169.             {
    170.                pm.XoaPhieuMuon(lvPhieuMuon.SelectedIndices[0]);
    171.             }
    172.             HienThiDanhSachPhieuMuon();
    173.             MessageBox.Show("Phiếu mượn của đọc giả " + cboDocGia.SelectedItem.ToString() + " đã được xóa", "Thông bao", MessageBoxButtons.OK, MessageBoxIcon.Information);
    174.             SoanLai();
    175.          }
    176.          else
    177.          {
    178.             MessageBox.Show("Bạn phải chọn 1 phiếu mượn trong danh sách trước", "Thông bao", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    179.          }
    180.       }
    181.  
    182.       private void btnCapnhat_Click(object sender, EventArgs e)
    183.       {
    184.          
    185.          if (lvPhieuMuon.SelectedIndices.Count > 0)
    186.          {
    187.            
    188.  
    189.             pm.CapNhatPhieuMuon(lvPhieuMuon.SelectedIndices[0], dateTimePickerNgayMuon.Value.ToShortDateString(), cboDocGia.SelectedIndex);
    190.                HienThiDanhSachPhieuMuon();
    191.                MessageBox.Show("Phiếu mượn đã được cập nhật thành công", "Thông bao", MessageBoxButtons.OK, MessageBoxIcon.Information);      
    192.          }
    193.            
    194.          else
    195.          {
    196.             MessageBox.Show("Bạn phải chọn 1 phiếu mượn trong danh sách trước", "Thông bao", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    197.          }
    198.       }
    199.  
    200.       private void btnSoanLai_Click(object sender, EventArgs e)
    201.       {
    202.          SoanLai();
    203.       }
    204.  
    205.       private void btnChiTietPhieuMuon_Click(object sender, EventArgs e)
    206.       {
    207.          DataTable dt;
    208.          dt = pm.LayDanhSachPhieuMuon();
    209.  
    210.          frmChiTietPhieuMuon frm = new frmChiTietPhieuMuon();
    211.          frm.ma = int.Parse(dt.Rows[lvPhieuMuon.SelectedIndices[0]]["maphieumuon"].ToString());
    212.          
    213.  
    214.          frm.ShowDialog();
    215.       }
    216.    }
    217. }
    Đã được chỉnh sửa lần cuối bởi danielh : 10-11-2011 lúc 11:07 PM.
    Một bài toán không có giải đáp là vì bài toán đó đặt câu hỏi sai

  2. #2
    Ngày gia nhập
    01 2011
    Bài viết
    189

    Chưa thấy cái hàm xóa của bạn.Up hết lên cho mọi người xem .Chắc là lỗi trong nút xóa và lúc bạn gán giá trị cho các đối số!!

  3. #3
    Ngày gia nhập
    10 2011
    Bài viết
    51

    Theo mình nghĩ vấn đề của bạn ở đây chính là sự đồng bộ giữa CSDL và DataTable. Khi bạn cập nhật xuống CSDL sau đó lại lấy dữ liệu từ CSDL lên, OK. Nhưng khi xóa thì theo code của bạn thì bạn chỉ xóa ở CSDL mà thôi, không đá động ở DataTable. Bạn debug xem thử, không biết đúng không nữa

  4. #4
    Ngày gia nhập
    12 2010
    Nơi ở
    tphcm
    Bài viết
    35

    Trích dẫn Nguyên bản được gửi bởi cuongdoannhat Xem bài viết
    Theo mình nghĩ vấn đề của bạn ở đây chính là sự đồng bộ giữa CSDL và DataTable. Khi bạn cập nhật xuống CSDL sau đó lại lấy dữ liệu từ CSDL lên, OK. Nhưng khi xóa thì theo code của bạn thì bạn chỉ xóa ở CSDL mà thôi, không đá động ở DataTable. Bạn debug xem thử, không biết đúng không nữa
    Theo ý bạn mình có xóa trong datatable mà:
    Visual C# Code:
    1. pm_dt.Rows.RemoveAt(index);
    Một bài toán không có giải đáp là vì bài toán đó đặt câu hỏi sai

  5. #5
    Ngày gia nhập
    10 2011
    Bài viết
    51

    Bạn thử lại xem:
    Sau khi xóa bạn gọi lại phương thức LayDanhSachPhieuMuon()

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    149

    Wink Lỗi "there is no row at position 4" trong listview

    post code lên đây coi nào
    Sharing for success!

  7. #7
    Ngày gia nhập
    12 2010
    Nơi ở
    tphcm
    Bài viết
    35

    Trích dẫn Nguyên bản được gửi bởi cuongdoannhat Xem bài viết
    Bạn thử lại xem:
    Sau khi xóa bạn gọi lại phương thức LayDanhSachPhieuMuon()
    mình thử rồi vẫn chưa được
    Một bài toán không có giải đáp là vì bài toán đó đặt câu hỏi sai

Các đề tài tương tự

  1. nghĩa của 3 từ "principals", "artifacts", "securables" là như thế nào?
    Gửi bởi ntbao trong diễn đàn English for IT | Tiếng anh cho dân CNTT
    Trả lời: 2
    Bài viết cuối: 02-09-2017, 06:36 PM
  2. Bài tập C lỗi "syntax error" trong file định dạng lại kiểu dữ liệu "types.h"
    Gửi bởi grandthorn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 10-09-2011, 07:29 AM
  3. Phân biệt "Công nghệ", "Ngôn ngữ", "Công cụ" trong thế giới lập trình
    Gửi bởi nhuan07 trong diễn đàn Thắc mắc chung
    Trả lời: 2
    Bài viết cuối: 09-06-2011, 08:45 AM
  4. Graphic Cách khắc phục lỗi "Out of Memory" khi dùng imageList và listView để xem ảnh?
    Gửi bởi who_am_i trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 24-05-2011, 10:29 PM
  5. Problems : " recover tree " with input as " preorder" and "inorder"
    Gửi bởi HoangManhHa1991 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 13-04-2011, 10:19 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn