1

这是我的代码:

private void CostList_Load(object sender, EventArgs e)
{
    // TODO: This line of code loads data into the 'lSEStockDataSet.CostPrice' table. You can move, or remove it, as needed.
    this.costPriceTableAdapter.Fill(this.lSEStockDataSet.CostPrice);

    con = new System.Data.SqlClient.SqlConnection();
    con.ConnectionString = "Data Source=tcp:SHEN-PC,49172\\SQLEXPRESS;Initial Catalog=LSEStock;Integrated Security=True";
    con.Open();

    DataGridView datagridview1 = new DataGridView();
    String retrieveData = "SELECT CostID, SupplierName, CostPrice FROM CostPrice WHERE PartsID ='" + textBox1.Text + "'";
    SqlCommand cmd = new SqlCommand(retrieveData, con);
    int count = cmd.ExecuteNonQuery();
    SqlDataReader dr = cmd.ExecuteReader();
    DataTable dt = new DataTable();
    dt.Load(dr);
    dataGridView1.DataSource = dt;
    con.Close();

}

private void button1_Click(object sender, EventArgs e)
{

    if (dataGridView1.Rows.Count > 0)
    {   
        int nRowIndex = dataGridView1.Rows.Count-1;


        if (dataGridView1.Rows[nRowIndex].Cells[2].Value != null)
        {
            textBox2.Text = Convert.ToString(dataGridView1.Rows[nRowIndex].Cells[2].Value);
        }
        else
        {
            MessageBox.Show("NULL");
        }
    }
}

当我单击按钮时它显示 NULL,这是什么问题?我在那里有 3 列,我想获取最后一行的第 3 列的数据,但它显示为 NULL 但指定单元格中有数据。任何人都知道如何解决这个问题?

4

1 回答 1

1

不要从行数中减去 1,而是尝试减去 2。减一将为您提供“添加”行的从零开始的索引,该行在最后一列中确实有一个空值。

    int nRowIndex = dataGridView1.Rows.Count-2;

通过从计数中减去 2,您将获得最后一行的从零开始的索引,其中包含实际数据。我想这就是你要找的。

顺便说一句,您可能希望参数化您的 SQL 查询,如下所示:

String retrieveData = "SELECT CostID, SupplierName, CostPrice FROM CostPrice WHERE PartsID = @inPartsID";
SqlCommand cmd = new SqlCommand(retrieveData, con);
cmd.Parameters.Add(new SqlParameter("@inPartsID", textBox1.Text));

这将使您的查询更可靠(如果 textBox1 中有单引号字符会发生什么情况)并且您的数据更安全(作恶者可以使用 SQL 注入对您的数据库造成损害或从中获取他们不应该的数据)。

于 2012-08-02T03:02:24.973 回答