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 を引いてみてください。1 を引くと、「追加」行の 0 から始まるインデックスが得られます。実際には、最後の列に null 値があります。

    int nRowIndex = dataGridView1.Rows.Count-2;

カウントから 2 を引くと、実際のデータが含まれる最後の行の 0 から始まるインデックスが得られます。これがあなたが探しているものだと思います。

余談ですが、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 に答える