0

何を探しているのかわかりませんが、描いた図で説明できます。

以下の最初のものは、グリッドビューに表示される「ユーザー入力」であり、ユーザーは詳細を入力する必要があります。(テキストボックス)はテキストボックスであり、その横の詳細は入力例です。

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);
}
}
4

4 に答える 4

1

値を保存する方法は、実際には非現実的で非正規化されています。

次のような値を保存する必要があります。

 ID            Items           Quantity      UnitPrice       Total
10001           Abc                  2          100           200
10001            def                 1          150            150

SQLで次のクエリを使用できます。

select * from table where ID = 10001

データテーブルまたはデータセット(使用するものは何でも)の2つの行が返されます。GridView、Repeater、Datalistなどの任意のコントロールと簡単にバインドできます。

このようにして、必要な形式でデータを表示するようにコードを簡単に減らすことができます。

それがあなたを助けるかもしれません。

于 2013-03-27T09:12:06.240 に答える
1

DataFromDataBaseは、データベースからデータを取得するデータテーブルです。最後に、 TempDataDatatableで必要な形式のデータを取得します 。

GrisviewをTempDataDatatableにバインドする必要があります。

私はこの作業を2つの列だけで行ったので、列に応じて変更できます。1つのフィールドの値の最大数として最大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");

このように編集すると、データセットまたはデータテーブル(選択)でデータを取得する必要があります

DataSet DataFromDataBase = new DataSet();
    SqlDataAdapter adp = new SqlDataAdapter("select * from tbdep;select * from tbemployee", ConfigurationManager.ConnectionStrings["cn"].ConnectionString);
    adp.Fill(DataFromDataBase);
于 2013-03-27T10:06:35.043 に答える
0

あなたが達成しようとしていることはコードで可能ですが、ストレージの読み取りと書き込みの際にカスタムの連結と分割が必要になります。

ただし、データを正規化して2つのテーブルを作成することをお勧めします。

IdHeader

HeaderIdCreatedOnUserNameなど

IdDetail

HeaderIdアイテム数量UnitPrice合計など

于 2013-03-27T09:12:56.643 に答える
0

同じIDでそれらが必要な場合は、別の列、たとえばOrderIdを追加してみませんか?

于 2013-03-27T09:32:53.903 に答える