【发布时间】:2017-01-21 04:57:32
【问题描述】:
当用户输入产品 ID 时,我的表单具有 textbox 作为产品 ID
我正在从 oracle 数据库中获取产品的详细信息(如 PRODUCT_DESC、UNIT_PRICE、...等),然后将其填写在 datagridview 以创建购买产品列表
我尝试加载数据集,但添加新产品 ID 时会删除旧记录
我尝试循环 dataset 并提取我想要的值,然后将它们添加到 datagridview 中的列中,这里的循环没有用,因为只有一条记录,但不会在 datagridview 上加载数据
请问怎么办??
有没有更好的方法来做到这一点?
private void SelectedProductData()
{
string connstr = @"Data Source=orcl; User Id=user; password=pwd;";
string cmdtxt = @"SELECT PRODUCT_ID,
PRODUCT_DESC,
UNIT_PRICE,
QUANTITY,
MEASUREMENT_UNIT,
MANUFACTORY
FROM WAREHOUSE
WHERE PRODUCT_ID = :P_Product_ID";
using (OracleConnection conn = new OracleConnection(connstr))
using (OracleCommand cmd = new OracleCommand(cmdtxt, conn))
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = cmdtxt;
cmd.Parameters.Add(new OracleParameter(":P_Product_ID", OracleDbType.Int32)).Value = TB_Product_ID.Text;
conn.Open();
OracleDataReader oraReader = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(oraReader);
while (oraReader.Read())
{
DGV_INVOICE.CurrentCell.Value = oraReader.GetString(0);
}
//foreach (DataRow dr in dt.Rows)
//{
// DGV_INVOICE.Rows[0].Cells[0].Value = dt.Rows[0]["PRODUCT_ID"].ToString();
//}
}
}
代码更新
private void TB_Product_ID_Leave(object sender, EventArgs e)
{
SelectedProductData();
}
方法
private void SelectedProductData()
{
string connstr = @"Data Source=JDT; User Id=admin; password=admin;";
string cmdtxt = @"SELECT PRODUCT_ID,
PRODUCT_DESC,
UNIT_PRICE,
QUANTITY,
MEASUREMENT_UNIT,
MANUFACTORY
FROM WAREHOUSE
WHERE PRODUCT_ID = :P_Product_ID";
using (OracleConnection conn = new OracleConnection(connstr))
using (OracleCommand cmd = new OracleCommand(cmdtxt, conn))
{
conn.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = cmdtxt;
cmd.Parameters.Add(new OracleParameter(":P_Product_ID", OracleDbType.Int32)).Value = TB_Product_ID.Text;
OracleDataReader oraReader = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(oraReader);
while (oraReader.Read())
{
DataGridViewRow dgvRow = new DataGridViewRow();
dgvRow.Cells[0].Value = oraReader.GetValue(2);
//dgvRow.Cells[0].Value = oraReader.GetString(2);
//dgvRow.Cells[0].Value = oraReader.GetString(3);
//dgvRow.Cells[0].Value = oraReader.GetString(4);
DGV_INVOICE.Rows.Add(dgvRow);
}
MessageBox.Show("done");
}
}
【问题讨论】:
-
@JohnG 我没有将数据源设置为 DataGridView First 1. 因为我手动创建了列,我想从数据库中填充行并在我想要的列中插入每个列值......因为在这些列有计算列,这些列将根据我从数据库中获得的数据进行计算,例如总价将根据数据库中的 unit_price 值乘以单元数来计算......等等......第二个 2. 如果我加载了 DataGridView,它将删除以前输入的记录并加载新的记录......对不起我的英语不好。希望现在很清楚
-
@JohnG 我上传了一张图片以使事情更清楚 我不会从数据库中重新读取两次数据 我正在读取数据 我想将其插入到
DataGridView的特定列中,这将是午餐DataGridView上的一个事件将计算总价格列,如果我在搜索时加载数据集并在网络上找到将删除以前的记录并加载新记录...示例我输入了价格为 1000 并命名为 test1 的产品 1当用户请求不会在DataGridView中加载另一条记录的新产品时,会将新记录加载到DataGridView并删除旧记录 -
@JohnG 是 图像显示用户看到的内容并更新图像以让您知道总价格列和列 1.2.3 来自数据库根据产品 ID 用户将输入数字 123 是每个应该加载的位置它不应该作为 DataGridView 列末尾的额外列加载,当我加载数据集时,我在右侧第 1 列中的 1 和第 2 列中的 2 加载数据集,而不是现在显示的...读取标记是该列1 乘以第 2 列减去第 3 列将得到总价格列中的数据,即我所说的计算列
-
@JohnG 左侧的第 1 列应该在右侧的第 1 列中,即数字的含义
标签: c# winforms c#-4.0 datagridview