0

私はasp.net開発者の初心者で、グリッドビューが含まれています

ProductID, ProductName, Price, Qty, Total

デフォルトは 5 列に設定

製品名を選択すると、価格が自動的に表示されますが、数量はユーザーが入力します。数量を入力しない場合は、メッセージが表示されます。いずれかの列が完全に入力されている場合は、データベースを保存しますか?

productName はドロップダウンリストです。コードにサーバー側のコードが必要です

protected void btnSave_Click(オブジェクト送信者, EventArgs e) {

    SqlDataAdapter sda;
    SqlCommand cmd;
    DateTime savedate = DateTime.ParseExact(txtBillDate.Text.Trim() + " " + DateTime.Now.ToString("hh:mm:ss tt"), "dd/MM/yyyy hh:mm:ss tt", null);

    TextBox txtProductID, txtPrice, txtQty, txtTotal;
    DropDownList ddlProductName;
    DataTable mdt = new DataTable();
    Label lblGrandTotal;

   if (DataCheck())
    {
        if (txtMobileNumber.Text != "")
        {
            con.Open();
            cmd = new SqlCommand("insert into Billing(BillNumber,BillDate,CustomerName,CustomerMobile) values('" + txtBillNumber.Text + "','" + savedate + "','" + ddlCustomerName.SelectedItem.Text + "','" + txtMobileNumber.Text + "')", con);

            for (int i = 0;i< GridView1.Rows.Count ; i++)
            {

                txtProductID = (TextBox)(GridView1.Rows[i].FindControl("txtProductID"));
                ddlProductName = (DropDownList)(GridView1.Rows[i].FindControl("ddlProductName"));
                txtPrice = (TextBox)(GridView1.Rows[i].FindControl("txtPrice"));
                txtQty = (TextBox)(GridView1.Rows[i].FindControl("txtQty"));
                txtTotal = (TextBox)(GridView1.Rows[i].FindControl("txtTotal"));
                lblGrandTotal = (Label)(GridView1.Rows[i].FindControl("lblGrandTotal"));


                    sda = new SqlDataAdapter("insert into BillingChild(ProductID,ProductName,Price,Qty,Total,BillNumber,BillDate,CustomerName,MobileNumber,BillChildNumber) values('" + txtProductID.Text + "','" + ddlProductName.SelectedItem + "','" + Convert.ToDecimal(txtPrice.Text) + "','" + Convert.ToDecimal(txtQty.Text) + "','" + Convert.ToDecimal(txtTotal.Text) + "','" + txtBillNumber.Text + "','" + savedate + "','" + ddlCustomerName.SelectedItem + "','" + txtMobileNumber.Text + "','" + txtBillChildNumber.Text + "')", con);
                    sda.Fill(mdt);
                    cmd.ExecuteNonQuery();



            }

            con.Close();
        }
    }
   else
   {
       Response.Write("<Script>alert('plz enter Qty')</script>");
   }


 }







public bool DataCheck()
{
    //TextBox txtProductID = null, txtPrice = null, txtQty = null, txtTotal = null;
    //DropDownList ddlProductName = null;
    //Label lblGrandTotal = null;
    TextBox txtProductID, txtPrice, txtQty, txtTotal;
    DropDownList ddlProductName;
    Label lblGrandTotal;
    if (GridView1.Rows.Count != 0)
    {
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {

            txtProductID = (TextBox)(GridView1.Rows[i].FindControl("txtProductID"));
            ddlProductName = (DropDownList)(GridView1.Rows[i].FindControl("ddlProductName"));
            txtPrice = (TextBox)(GridView1.Rows[i].FindControl("txtPrice"));
            txtQty = (TextBox)(GridView1.Rows[i].FindControl("txtQty"));
            txtTotal = (TextBox)(GridView1.Rows[i].FindControl("txtTotal"));
            lblGrandTotal = (Label)(GridView1.Rows[i].FindControl("lblGrandTotal"));


            if (txtQty.Text != "")
            {
                continue;

            }

            else
            {
                return false;
            }
        }
    }

    return true;

}
4

2 に答える 2

0

グリッドビューの各テキスト ボックスに asp.net 必須フィールド バリデータを追加できます。

<asp:TextBox id="txtQty" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator id="reqQty" ControlToValidate="txtQty" ErrorMessage="*"></asp:RequiredFieldValidator>

推敲

T-SQL

create table products
( 
    id int identity(1,1),
    name varchar(500),
    price decimal(18,2)
)

insert into products values ('Soap', 15.0)
insert into products values ('Provitas', 25.0)
insert into products values ('Paper', 10.0)
insert into products values ('Foam Bath', 150.0)

ASPX

    <asp:GridView ID="gvTest" runat="server" DataSourceID="SqlTest" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField HeaderText="ID" DataField="ID" />
            <asp:BoundField HeaderText="Name" DataField="Name" />
            <asp:BoundField HeaderText="Price" DataField="Price" />
            <asp:TemplateField HeaderText="Qty">
                <ItemTemplate>
                    <asp:TextBox ID="txtQty" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="reqQty" runat="server" ControlToValidate="txtQty" ErrorMessage="*"></asp:RequiredFieldValidator>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlTest" runat="server" ConnectionString="Data Source=.\SQLEXPRESS;Initial Catalog=play;Persist Security Info=True;User ID=user;Password=userpassword" SelectCommand="SELECT id, name, price FROM Products"></asp:SqlDataSource>
    <asp:Button ID="cmdTest" runat="server" Text="Submit" />

ユーザーが入力した数量を取得する C# ボタン クリック ハンドラ

protected void cmdTest_Click(object sender, EventArgs e)
{
    for (int i = 0; i < gvTest.Rows.Count; i++)
    {
        int qty = Convert.ToInt32(((TextBox)gvTest.Rows[i].FindControl("txtQty")).Text);
        // code here
    }
}

検証結果

ここに画像の説明を入力

于 2012-11-28T09:41:11.277 に答える
0

5 つの列すべてで default-set を使用している場合は、requiredfieldvalidator を使用できません。正規表現バリデーターを試してください。

于 2012-11-28T09:48:27.753 に答える