从 DataGridView 中获取选定的行

11

每当用户单击“添加到购物车”按钮时,我将从“项目找到”网格(屏幕截图左侧)中选择的行添加到“已选项目”网格(屏幕截图右侧)中。

屏幕截图:链接 http://img856.imageshack.us/img856/3015/datagridview.jpg

搜索按钮从搜索服务中获取图书列表,我将其显示在itemsFoundList中,该列表是一个DataGridView。

private void searchButton_Click( object sender, EventArgs e )
{
    itemsFoundList.Columns.Clear ();
    string[] list = searchServiceClient.BookSearch ( getBookName.Text, getAuthorName.Text );
    itemsFoundList.Columns.Add ( "Items", "Items found:" );
    displayToGrid ( itemsFoundList, list );
}

现在我不知道如何将选择的行添加到购物车列表(cartList),而cartList是一个DataGridView。

private void addToCart_Click( object sender, EventArgs e ) {
    //I am not getting what to write here.
}

你控制着searchServiceClient吗?还是它是由第三方维护的服务? - iwalkbarefoot
你觉得可以假设你可能有一个BookID或其他唯一标识符,除了现在返回的信息之外,你能否返回它? - iwalkbarefoot
是的。如果你想要,我们可以返回唯一标识符。但这对目前的情况有什么影响吗?我只是希望用户选择的行能够在另一个表格中显示出来。 - ivorykoder
1个回答

30

首先,您可能需要更改DataGridView的SelectionMode为FullRowSelect。否则,用户很可能选择单元格而不是行,下面的代码将无法正常工作。[虽然您也可以使用所选单元格进行类似操作]

然后,您将开始使用类似以下代码的代码:

foreach (DataGridViewRow r in dataGridView1.SelectedRows)
{
   //Code to add selected row to new datagrid.
   //Important to note that dataGridView2.Rows.Add(r) will not work 
   //because each row can only belong to one data grid.  You'll have 
   //to create a new Row with the same info for an exact copy
}

个人建议将bookid作为一个隐藏列返回,这样在处理用户的购物车时就可以使用它了。

如果您想要将项从一个DataGridViewRow移动到另一个[以便它们只能存在于一个列表中],可以这样做。

foreach (DataGridViewRow r in dataGridView1.SelectedRows)
{
  dataGridView1.Rows.Remove(r);
  dataGridView2.Rows.Add(r);
}

首先,您可能希望将DataGridView的SelectionMode更改为FullRowSelect。- 今天真是美好的一天 :-) - ivorykoder
哈,那是一个有趣的小笔误,希望这对你有用。 - iwalkbarefoot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接