我有一个Access数据库,该数据库的一列中具有名称ID-s,我在第一列中填充了这些ID-(38、51、88),而我想做的就是基于这些ID-s想要用Access数据库中但另一个表中的其他一些数据填充最后选择的列。
例如,ID 38将在该行中给我一个价格或名称。
我尝试了很多次,但是找不到解决方案,而且我不知道是否必须为此使用SQL。
我获得了所需的SQL代码,但是我不知道如何将其用于datagridview。
我用类似的东西来填充这样的组合框:
OleDbConnection connection = new OleDbConnection();
connection.ConnectionString = "the connection string";
connection.Open();
string query2 = "SELECT Name From Names";
command.CommandText = query2;
OleDbDataReader reader2 = command.ExecuteReader();
while (reader2.Read())
{
Combobox1.Items.Add(reader2["Name"].ToString());
}
connection.Close();
现在我认为我应该在if语句中检查38 ID是否在DataGridView中,然后在Access表的同一行中用该值填充另一个单元格。
答案 0 :(得分:0)
是否要使用来自另一个表的相应价格和名称填充datagridview?
这是您可以参考的演示。
private void btnSetPriceName_Click(object sender, EventArgs e)
{
string constr = @"connection string";
// create sql string
StringBuilder strSQL = new StringBuilder();
strSQL.Append("select Price, Name from PriceName where ");
for(int i = 0;i< dataGridView1.Rows.Count - 1;i++)
{
// get Id from string, like "38/1/R"
string Id = dataGridView1.Rows[i].Cells[0].Value.ToString().Split('/')[0];
if (i == 0)
strSQL.Append("Id = " + Id);
else
strSQL.Append("or Id = " + Id);
}
using (OleDbConnection conn = new OleDbConnection(constr))
{
OleDbCommand cmd = new OleDbCommand (strSQL.ToString(), conn);
conn.Open();
try
{
OleDbDataReader reader = cmd.ExecuteReader();
if (reader != null && reader.HasRows)
{
int rowindex = 0;
while (reader.Read())
{
// Set Price/Name column value
dataGridView1.Rows[rowindex].Cells["Price"].Value = reader[0].ToString().Trim();
dataGridView1.Rows[rowindex].Cells["Name"].Value = reader[1].ToString().Trim();
rowindex++;
}
}
reader.Close();
}
catch (Exception ex)
{
Console.WriteLine("\nError:\n{0}", ex.Message);
}
}
}