Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

3Layer C# asp.net: insert dropdownlist selected text and value

Tags:

c#

asp.net

I have a 3 Layer asp.net c# code. My BL:

    public DataTable ddl()
    {
        base.Link();
        string Query = "SELECT [nam], [idZone] FROM [zones] ORDER BY idZone";
        DataTable Output_Q = base.SelectDataText(Query);
        base.UnLink();
        return Output_Q;
    }
    public void insert()
    {
        base.Link();
        string Query = "INSERT INTO students (fnam, lnam, cod, idZone) VALUES ( '{0}', '{1}', '{2}', {3} )";
        Query = string.Format(Query, fnam, lnam, cod, idZone);
        base.commanddatatext(Query);
        base.UnLink();

My Code:

    page_load:
    BL_students_new F = new BL_students_new();
    DropDownList1.Items.Clear();
    DropDownList1.DataSource = F.ddl();
    DropDownList1.DataTextField = "nam";
    DropDownList1.DataValueField = "idZone";
    DropDownList1.DataBind();

        btn_insert:
        BL_students_new F = new BL_students_new();
        F.fnam = TextBox1.Text.Trim();
        F.lnam = TextBox2.Text.Trim();
        F.cod = TextBox3.Text.Trim();
        F.idZone = Convert.ToInt32(DropDownList1.SelectedItem.Value);
        F.insert();

it saves every things but dropdownlist value. note that my ddl has text and int value and i need the value to be saved. but it fails. (My DA is OK too.)

like image 574
Reza Mezerji Avatar asked Dec 03 '25 04:12

Reza Mezerji


1 Answers

From your comment above:

populating ddl is in page_load and inserting is in btn_insert

Page_Load happens before btn_Insert. This happens every time the page is requested, regardless of whether it's a "post back" or not. (After all, the page has to load into a usable state before it can even know the nature of the HTTP request.)

So what's happening is the following:

  1. Bind the DropDownList options
  2. Show the page to the user
  3. User selects an option and submits
  4. Re-bind the DropDownList options, losing whatever the user selected
  5. Insert to database

A simple way to address this in WebForms is to wrap your DropDownList binding logic in a condition on IsPostBack. Something like this:

// in Page_Load:
if (!IsPostBack)
{
    BL_students_new F = new BL_students_new();
    DropDownList1.Items.Clear();
    DropDownList1.DataSource = F.ddl();
    DropDownList1.DataTextField = "nam";
    DropDownList1.DataValueField = "idZone";
    DropDownList1.DataBind();
}

That way you're only populating the DropDownList when the page is initially requested, not when the user is submitting the form.

like image 88
David Avatar answered Dec 05 '25 21:12

David