我不知道如何描述我正在寻找的东西,但我可以用我绘制的图表来说明它。
下面的第一个是'用户输入',它将在gridview中,它将要求用户输入详细信息。 (文本框)是一个文本框,旁边的详细信息是输入示例。
User Inputs:
Items Quantity Unit Price Total
(textBox)abc (textBox)2 (textBox) 100 (textBox) 200
(textBox)def (textBox)1 (textBox) 150 (textBox) 150
单击保存按钮后(我没有显示按钮,抱歉),详细信息将保存在数据库中,如下面的“保存在数据库中”所示。
Save in Database:
ID Items Quantity UnitPrice Total
10001 Abc , def 2,1 100,150 200,150
当用户想要显示详细信息时,详细信息应显示在下面的“显示结果”中。
Display Results:
ID:10001
Items Quantity Unit Price Total
Abc 2 100 200
def 1 150 150
我希望这个解释是可以理解的,我在解释和ASP方面都很差。 请帮我用C#或VB编写代码,因为我不能选择这样做。 非常感谢。
代码示例:
string sql = "INSERT INTO Products(Name, ProductImage, OriginalPrice, DiscountPrice, Descriptions,StockQuantity, Category) VALUES (@Name, @ProdImage, @OriPrice, @DisPrice, @Descrp, @Quantity, @Category)";
try
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlParameter[] param = new SqlParameter[7];
param[0] = new SqlParameter("@Name", SqlDbType.VarChar,100);
param[1] = new SqlParameter("@ProdImage", SqlDbType.VarChar, 100);
param[2] = new SqlParameter("@OriPrice", SqlDbType.Float );
param[3] = new SqlParameter("@DisPrice", SqlDbType.Float );
param[4] = new SqlParameter("@Descrp", SqlDbType.VarChar,50);
param[5] = new SqlParameter("@Quantity", SqlDbType.Int);
param[6] = new SqlParameter("@Category", SqlDbType.VarChar,50);
param[0].Value = name;
param[1].Value = image;
param[2].Value = OriPrice;
param[3].Value = disPrice;
param[4].Value = description;
param[5].Value = quantity;
param[6].Value = Category;
for (int i = 0; i < param.Length; i++)
{
cmd.Parameters.Add(param[i]);
}
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
当前代码:
private string CreateRow(DataTable data, Int32 index, String ColumnName)
{
String[] quan = data.Rows[0][ColumnName].ToString().Split(',');
if (quan.Length >= index)
return quan[index].ToString();
else
return "";
}
protected void GridView2_SelectedIndexChanged(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("");
string sql = "SELECT * FROM SalesOrder WHERE ID = 10010";
DataSet DataFromDataBase = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter("SELECT * FROM SalesOrder WHERE ID = 10010", conn);
adp.Fill(DataFromDataBase);
DataTable TempData = new DataTable();
TempData.Columns.Add("Quantity", typeof(string));
TempData.Columns.Add("UnitPrice", typeof(string));
for (Int32 i = 0; i < 5; i++)
{
DataRow row = TempData.NewRow();
row[0] = CreateRow(DataFromDataBase, i, "Quantity");
row[1] = CreateRow(DataFromDataBase , i, "UnitPrice");
TempData.Rows.Add(row);
}
}
答案 0 :(得分:1)
保存值的方式实际上是不现实和非规范化的。
您应该保存以下值:
ID Items Quantity UnitPrice Total
10001 Abc 2 100 200
10001 def 1 150 150
您可以在sql中使用以下查询:
select * from table where ID = 10001
它将返回数据表或数据集中的两行(无论您使用什么)。您可以轻松地将它与GridView,Repeater和Datalist等任何控件绑定。
通过这种方式,您可以轻松减少代码,以所需格式显示数据。
它可以帮助你。
答案 1 :(得分:1)
DataFromDataBase 是一个数据表,您可以从中获取数据库中的数据。 最后,您将在 TempData Datatable。
中获得所需格式的数据您必须将Grisview与 TempData Datatable绑定。
我只使用两列完成了这项工作,您可以根据列进行更改。我在一个字段中取最大值为5作为最大值。你可以根据你的要求进行修改。
DataTable TempData = new DataTable();
TempData.Columns.Add("Quantity", typeof(string));
TempData.Columns.Add("UnitPrice", typeof(string));
for (Int32 i = 0; i < 5; i++)
{
DataRow row = TempData.NewRow();
row[0] = CreateRow(DataFromDataBase, i, "Quantity");
row[1] = CreateRow(DataFromDataBase, i, "UnitPrice");
TempData.Rows.Add(row);
}
private string CreateRow(DataTable data, Int32 index, String ColumnName)
{
String[] quan = data.Rows[0][ColumnName].ToString().Split(',');
if (quan.Length >= index)
return quan[index].ToString();
else
return "";
}
如果要从数据库中获取 DataSet 中的数据。您可以将参数传递给 CreateRow 功能,如下所示
CreateRow( DataFromDataBase.Tables[0], i, "UnitPrice");
EDIT 这样你必须获取数据集或数据表(你的选择)中的数据
DataSet DataFromDataBase = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter("select * from tbdep;select * from tbemployee", ConfigurationManager.ConnectionStrings["cn"].ConnectionString);
adp.Fill(DataFromDataBase);
答案 2 :(得分:0)
您尝试在代码中实现的目标是可能的,但在读取和写入存储时需要自定义连接和拆分。
但是,我建议您规范化数据并创建2个表:
<强> IdHeader 强>
HeaderId 创建于 用户名 等
<强> IdDetail 强>
HeaderId 项目 数量 单价 总 等
答案 3 :(得分:0)
如果您希望它们使用相同的ID,为什么不添加另一列,比如说OrderId?