【问题标题】:Get a single value from query从查询中获取单个值
【发布时间】:2018-11-30 08:02:56
【问题描述】:

我想从这个查询中得到一个 rentId 值。然后我像这样尝试,但我有一些错误。最后一次编码我遇到了类似

的错误

'System.Windows.Forms.DataGridView.CurrentRow.get' 返回 null

代码:

public int RentalId { get; set; }

String query2 = "SELECT TOP 1 * FROM Rental ORDER BY RentalId DESC";
ds = new DataSet();
da = new SqlDataAdapter(query2, con);
da.Fill(ds);
builder = new SqlCommandBuilder(da);
dgvInUse.DataSource = ds.Tables[0];          
dgvInUse.Rows[0].Selected = true;

// I don't know how to extract RentalId
RentalId = Convert.ToInt32(dgvInUse.CurrentRow.Cells[0].Value.ToString());

【问题讨论】:

  • 你应该逐步分析问题,这样你才能找到问题所在。我建议在执行查询后使用 MessageBox 或任何 Debug 输出显示 RentalId 字段的内容,以确保它正常工作。如果这工作正常,那么您可以继续调试以下代码。

标签: c# sql winforms


【解决方案1】:

来自Microsoft documentation

要更改当前行,您必须将 CurrentCell 属性设置为 所需行中的单元格。

将一行标记为选中并不会使其成为当前行(您可以选择多行,但当前行必须只有一个)。

编辑:

        if (dgvInUse.Rows.Count > 0 && dgvInUse.Rows[0].Cells.Count > 0 && dgvInUse.Rows[0].Cells[0].Value != null)
            RentalId = Convert.ToInt32(dgvInUse.Rows[0].Cells[0].Value);
        else
            throw new Exception("Cannot get RentalId"); // or other action 

【讨论】:

  • RentalId = Convert.ToInt32(dgvInUse.CurrentRow.Cells[0].Value.ToString());将获取值为“rentalId”,但获取值为“0”。在 dgvInUse 中,我只选择了 1 个值。你能给我例如编码吗?谢谢。
  • RentalId = Convert.ToInt32(dgvInUse.Rows[0].Cells[0].Value.ToString()); 当然,您需要在之前进行检查 - 它可能会发生,您的查询不会返回任何行。此外,我可以建议在 SQL 查询中指定列,例如 "SELECT TOP 1 RentalId, other fields... FROM Rental ORDER BY RentalId DESC"
  • 谢谢。它解决了从将“currentRow”更改为“Rows”的问题。谢谢!
  • 欢迎您! :) 请也检查我的编辑 - 如果查询结果中没有记录,我添加了一些大小写检查。
猜你喜欢
  • 1970-01-01
  • 2014-11-13
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多