DataGridViewRow如何通过ColumnName索引Cells?

LanPst 2014-06-24 02:53:06
1. 我的数据源是DataGridViewRow一行行加载到DataGridView中的。
2. 设置一行时我的方法是
DataGridViewRow dgvr = new DataGridViewRow();
dgvr.CreateCells(dataGridView1);
dgvr.Cell[0].Value = "";
//...
dataGridView1.Rows.Add(dgvr);

3. 将以上方法的索引改为列名会出现错误。列名不存在.
dgvr.Cell["ColumnName"].Value="";


因为我要做排序,所以数字索引不能用,想直接用列名,要怎么实现呢?
...全文
229 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
save4me 2014-06-24
  • 打赏
  • 举报
回复
参考: Unable to find a DataGridView's cell by its column name,检查一下你是否给列设置了DataPropertyName属性为列名 也可以参考: How to set Cell value of DataGridViewRow by column name?
引用
When you use the ColumnName indexer of the DataGridViewCellCollection, internally it tries to get the column index using the ColumnName from the owning/parent DataGridView of this DataGridViewRow instance. In your case the row hasn't been added to the DataGridView and hence the owning DataGridView is null. That's why you get the error that It couldn't find the column named code.
意思就是在你把数据行添加到一个DataGridView之前,它还不属于这个DataGridView,所以没有列名。可以通过下面的方法间接取到Index在赋值

dgvr.Cells[dataGridView1.Columns["code"].Index].Value = "";
namespace LibraryManager { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { Tool.InitCategoryData(cbCategoy); } #region 数据初始化 private void tsbCategory_Click(object sender, EventArgs e) { CategoryForm cf = new CategoryForm(); cf.ShowDialog(); } private void ShowData(int categoryID) { ///创建LibraryManagerDB数据库的数据上下文 LibraryManagerDBDataContext db = new LibraryManagerDBDataContext(LibraryManager.Properties.Settings.Default.LibraryManagerDBConnectionString); ///查询数据 var result = from b in db.Book join bc in db.BookCategory on b.ID equals bc.BookID where bc.CategoryID == categoryID orderby b.PublishDate descending select b; ///设置dgvBook控件的数据源 dgvBook.DataSource = result; dgvBook.AutoGenerateColumns = false; ///排列列显示的顺序 int index = 0; dgvBook.Columns["cName"].DisplayIndex = index++; dgvBook.Columns["cISBN"].DisplayIndex = index++; dgvBook.Columns["cAuthor"].DisplayIndex = index++; dgvBook.Columns["cPublish"].DisplayIndex = index++; dgvBook.Columns["cPublishDate"].DisplayIndex = index++; dgvBook.Columns["cStore"].DisplayIndex = index++; dgvBook.Columns["cBorrowNumber"].DisplayIndex = index++; dgvBook.Columns["cUpdate"].DisplayIndex = index++; dgvBook.Columns["cDelete"].DisplayIndex = index++; ///设置列的可见性 for (int i = 0; i < dgvBook.Columns.Count; i++) { DataGridViewColumn c = dgvBook.Columns[i]; if (c.DisplayIndex > index - 1) c.Visible = false; c.SortMode = DataGridViewColumnSortMode.NotSortable; } dgvBook.Columns["cUpdate"].Width = 40; dgvBook.Columns["cDelete"].Width = 40; ///设置行显示的值 foreach (DataGridViewRow row in dgvBook.Rows) { row.HeaderCell.Value = (row.Index + 1).ToString(); if (Int32.Parse(row.Cells["cBorrowNumber"].Value.ToString()) > 0) { row.Cells["cDelete"].Value = string.Empty; } else { row.Cells["cDelete"].Value = "删除"; } } ///设置按钮的可用性 if (dgvBook.CurrentRow != null) { Book book = result.ToList()[dgvBook.CurrentRow.Index]; btnLend.Enabled = (book.Status.Value == 2 || book.Store <= 0) ? false : true; } } private void dgvBook_CellContentClick(object sender, DataGridViewCellEventArgs e) { } private void dgvBook_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { ///设置借阅书籍按钮的可用性 if (e.RowIndex < 0 || e.RowIndex > dgvBook.Rows.Count - 1) return; Book book = ((IQueryable)dgvBook.DataSource).ToList()[e.RowIndex]; btnLend.Enabled = (book.Status.Value == 2 || book.Store <= 0) ? false : true; } #endregion #region 按钮事件设计 private void pbCategory_Click(object sender, EventArgs e) { ///打开分类管理的对话框 CategoryForm cf = new CategoryForm(); cf.ShowDialog(); } private void cbCategoy_SelectedIndexChanged_1(object sender, EventArgs e) { ///显示书籍的数据 try { ShowData(((Category)cbCategoy.SelectedItem).ID); } catch (Exception ex) { Console.WriteLine(ex); } } private void btnLend_Click(object sender, EventArgs e) { ///打开借阅书籍的对话框 LendForm lf = new LendForm(); IQueryable books = ((IQueryable)dgvBook.DataSource); lf.BookID = books.ToList()[dgvBook.CurrentRow.Index].ID; if (lf.ShowDialog() == DialogResult.OK) { ShowData(((Category)cbCategoy.SelectedItem).ID); } } private void btnAdd_Click_1(object sender, EventArgs e) { ///打开添加书籍的对话框 BookForm bf = new BookForm(); if (bf.ShowDialog() == DialogResult.OK) { ShowData(((Category)cbCategoy.SelectedItem).ID); } } private void MainForm_FormClosed(object sender, FormClosedEventArgs e) { ///退出应用程序 Application.Exit(); } #endregion private void pLeft_Paint_1(object sender, PaintEventArgs e) { ControlPaint.DrawBorder3D(e.Graphics, e.ClipRectangle, Border3DStyle.Etched, Border3DSide.Right); } private void pBottom_Paint_1(object sender, PaintEventArgs e) { ControlPaint.DrawBorder3D(e.Graphics, e.ClipRectangle, Border3DStyle.Etched, Border3DSide.Top); } private void label1_Click(object sender, EventArgs e) { } private void pbCategory_Click_1(object sender, EventArgs e) { ///打开分类管理的对话框 CategoryForm cf = new CategoryForm(); cf.ShowDialog(); } private void dgvBook_CellContentClick_1(object sender, DataGridViewCellEventArgs e) { ///判断列索引是否合法 if (e.ColumnIndex < 0 || e.ColumnIndex > dgvBook.Columns.Count - 1) return; if (dgvBook.Columns[e.ColumnIndex].Name == "cBorrowNumber") { ///打开查看借阅书籍用户的对话框 LendUserInfoForm luif = new LendUserInfoForm(); IQueryable books = ((IQueryable)dgvBook.DataSource); luif.BookID = books.ToList()[e.RowIndex].ID; luif.ShowDialog(); } if (dgvBook.Columns[e.ColumnIndex].Name == "cUpdate") { ///打开修改书籍的对话框 BookForm bf = new BookForm(); IQueryable books = ((IQueryable)dgvBook.DataSource); bf.BookID = books.ToList()[e.RowIndex].ID; if (bf.ShowDialog() == DialogResult.OK) { ///更新数据 ShowData(((Category)cbCategoy.SelectedItem).ID); } } if (dgvBook.Columns[e.ColumnIndex].Name == "cDelete") { if (MessageBox.Show("确定要删除该书籍吗?", "删除书籍询问对话框", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { ///创建LibraryManagerDB数据库的数据上下文 LibraryManagerDBDataContext db = new LibraryManagerDBDataContext(LibraryManager.Properties.Settings.Default.LibraryManagerDBConnectionString); ///查询被删除的书籍 IQueryable books = ((IQueryable)dgvBook.DataSource); var deleteBooks = db.Book.Where(b => b.ID == books.ToList()[e.RowIndex].ID); ///删除数据,并提交到数据库中 db.Book.DeleteAllOnSubmit(deleteBooks); db.SubmitChanges(); MessageBox.Show("恭喜您,删除书籍成功!"); } } } } }

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧