پیاده سازی چهار عمل اصلی با استفاده از ListBox در ASp.net

یکشنبه 17 خرداد 1394

در این مقاله قصد داریم که به چگونگی پیاده سازی چهار عمل اصلی در ریاضی با استفاده از listBox وطریقه استفاده از کلاس و ارث بری را به شما دوستان آموزش بدهیم.

پیاده سازی چهار عمل اصلی با استفاده از ListBox در ASp.net

در این مقاله قصد داریم که به چگونگی پیاده سازی چهار عمل اصلی در ریاضی با استفاده از listBox وطریقه استفاده از کلاس و ارث بری را به شما دوستان آموزش بدهیم.

برای شروع ابتدا باید یک کلاس به اسم MathOp را برای پیاده سازی اعمال جمع و تفریق  و سپس یک کلاس دیگر به نام MathOp2 برای پیاده سازی اعمال ضرب و تقسیم که از کلاس MathOp  ارث بری میکند را ایجاد میکنیم.

    public class MathOp  
    {  
        public Decimal Add(Decimal value1, Decimal value2)  
        {  
            return (value1 + value2);  
        }  
        public Decimal Subtract(Decimal value1, Decimal value2)  
        {  
            return (value1 - value2);  
        }  
    }  
    public class MathOp2: MathOp   
    {  
        public Decimal Mul(Decimal value1, Decimal value2)  
        {  
            return (value1 * value2);  
        }  
        public Decimal Div(Decimal value1, Decimal value2)  
        {  
            return (value1 / value2);  
        }  
    }  

نحوه ایجاد کلاس هم به این گونه است که روی پروژه راست کلیک کرده و Add>Class  را انتخاب میکنیم.

حال باید یک جدول در بانک  اطلاعاتی خود ایجاد کنیم تا این که اطلاعات وارد شده  در ListBox،در بانک اطلاعاتی ذخیره شود.

برای این کار یک بانک اطلاعاتی به نام ListBox   ایجاد میکنیم ویک جدول به نام MathRresults در بانک اطلاعاتی خود میسازیم.

Create  DataBase ListBox
    Create table MathRresults(  
    ID int primary key identity(1,1),  
    Result varchar(20)  
    )  

 

حال یک پروژه از نوع Asp.Net ایجاد کرده و پس ایجاد یک صفحه WebFom  ،    کد های زیر را به صفحه design  اضافه کنید.

 

 <table class="auto-style1" dir="rtl">
            <tr>
                <td class="auto-style2" >
                    <asp:Label ID="lblMsg" runat="server" Text="عدد اول"></asp:Label>
                </td>
                <td class="auto-style3">
                    <asp:TextBox ID="txtFirstNumber" runat="server"  Width="154px"></asp:TextBox>
                </td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
            <tr>
                <td class="auto-style2" >
                    
                    <asp:Label ID="lblMsgs" runat="server" Text="عدد دوم"></asp:Label>
                    
                </td>
               
                <td class="auto-style3">
                    <asp:TextBox ID="txtSecondNumber" runat="server" Width="154px"></asp:TextBox>
                </td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
            <tr>
                <td class="auto-style2">عملگر محسابه گر</td>
                <td class="auto-style3">
                    <asp:Button ID="btnAdd" runat="server" Text="+" Width="26px" OnClick="btnAdd_Click" style="height: 26px"  />
                    <asp:Button ID="btnSubtrac" runat="server" Text="-" Width="34px" OnClick="btnSubtrac_Click" />
                    <asp:Button ID="btnMultiply" runat="server" Text="*" Width="31px" OnClick="btnMultiply_Click" />
                    <asp:Button ID="btnDivide" runat="server" Text="/" Width="31px" OnClick="btnDivide_Click" />
                </td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
            <tr>
                
                <td class="auto-style2">
                    <asp:Label ID="lblResult" runat="server" Text="نتیجه"></asp:Label>
                </td>
                <td class="auto-style3">
                    <asp:ListBox ID="ListBox1" runat="server" Height="75px" Width="313px"></asp:ListBox>
                </td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
            <tr>
                <td class="auto-style2">
                    <asp:Button ID="btnClear" runat="server" Text="پاک " OnClick="btnClear_Click" />
                    </td>
                <td class="auto-style3">
                    <asp:Button ID="btnDelete" runat="server" Text="حذف" Width="77px" OnClick="btnDelete_Click" />
                </td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
        </table>     

سپس Script های زیر را به صفحه desing خود اضافه کنید.

<script type = "text/javascript" > function Valid()  
{  
    if (document.getElementById('<%=txtFirstNumber.ClientID%>').value.trim() == "") {  
        var msg = document.getElementById('<%=lblMsg.ClientID %>');
        msg.innerHTML = "لطفا عدد اول را وار کنید";  
        msg.style.color = "red";  
        document.getElementById('<%=txtFirstNumber.ClientID%>').focus();  
        return false;  
    }  
    if (document.getElementById('<%=txtSecondNumber.ClientID%>').value.trim() == "") {  
        var msg = document.getElementById('<%=lblMsgs.ClientID %>');  
        msg.innerHTML = "لطفا عدد  دوم راوارد کیند";  
        msg.style.color = "red";  
        document.getElementById('<%=txtSecondNumber.ClientID%>').focus();  
        return false;  
    }  
}   
</script> 

و حال  در این مرحله یک متد به نام Clear ایجاد میکنیم که این متد باعث پاک کردن  مقادیر روی TextBoxها بعد از هربار ذخیره در بانک اطلاعاتی  میشود ویک متد دیگر به نام saveResult در این قطعه کد وجود دارد که باعث میشود مقادیر واردشده داخل listBox   در بانک اطلاعاتی ذخیره شود

    private void Clear()  
    {  
        txtFirstNumber.Text = string.Empty;  
        txtSecondNumber.Text = string.Empty;  
    }  
    saveResult() method is used to save the result sets in database.  
    private void saveResult()  
    {  
        SqlConnection con = new SqlConnection(constr);  
        SqlCommand cmd = new SqlCommand("insert into MathRresults values('" + lblResult.Text + "')", con);  
        SqlDataReader dbr;  
        try  
        {  
            con.Open();  
            dbr = cmd.ExecuteReader();  
            lblMsg.Text = "Values saved Successfully";  
            lblMsg.ForeColor = Color.Green;  
            dbr.Read();  
            //while (dbr.Read())  
            //{  
            //}  
        }  
        catch (Exception ex)  
        {  
            lblMsg.Text = "Failed to Save because :" + ex;  
            lblMsg.ForeColor = Color.Red;  
        }  
        con.Close();  
        BindResultsToListview();  
    }  
    UpdateResult() method is used to update the result sets with existing records in database.  
    private void UpdateResult()  
    {  
        int ? id = null;  
        foreach(ListItem li in ListBox1.Items)  
        {  
            if (li.Selected == true)  
            {  
                id = Convert.ToInt32(ListBox1.SelectedValue);  
            }  
        }  
        SqlConnection con = new SqlConnection(constr);  
        SqlCommand cmd = new SqlCommand("Update MathRresults set Result = '" + lblResult.Text + "' Where ID = '" + id + "'", con);  
        SqlDataReader dbr;  
        try   
        {  
            con.Open();  
            dbr = cmd.ExecuteReader();  
            lblMsg.Text = "Values Updated Successfully";  
            lblMsg.ForeColor = Color.Green;  
            dbr.Read();  
            //while (dbr.Read())  
            //{  
            //}  
        }   
        catch (Exception ex)  
        {  
            lblMsg.Text = "Failed to update because:" + ex;  
            lblMsg.ForeColor = Color.Red;  
        }  
        finally  
        {  
            con.Close();  
            BindResultsToListview();  
        }  
    }  
    //BindResultsToListview Method is used to bind the operations to ListBox.  
    private void BindResultsToListview()  
    {  
        Clear();  
        SqlConnection con = new SqlConnection(constr);  
        string cmd = "Select Id, Result from MathRresults";  
        SqlDataAdapter adpt = new SqlDataAdapter(cmd, con);  
        DataSet ds = new DataSet();  
        adpt.Fill(ds, "MathRresults");  
        DataTable myDataTable = ds.Tables[0];  
        if (ds.Tables.Count > 0 && ds != null && ds.Tables[0].Rows.Count > 0) {  
            ListBox1.DataSource = ds;  
            ListBox1.DataValueField = "ID";  
            ListBox1.DataTextField = "Result";  
            ListBox1.DataBind();  
        }  
    }  
    //DeleteFromListView is used to delete the selected item in ListBox.  
    private int DeleteFromListView(int id)  
    {  
        //Here using statement is automatically close the connections  
        using(SqlConnection con = new SqlConnection(constr))  
        {  
            SqlCommand cmd = new SqlCommand("delete from MathRresults where id = " + id + "", con);  
            con.Open();  
            cmd.ExecuteNonQuery();  
            return 0;  
        }  
    }  

و در تابع page_ load  قطعه کد زیر را بنویسید

    //Clear() – clear the textbox values.  
    //BindResultsToListview() – bind the records to listbox from database.  
    if (!Page.IsPostBack)  
    {  
       Clear();  
       BindResultsToListview();  
    }  

حال روی دکمه "+ " دوبار کلیک کرده تا رویدادClick  آن فراخوانی شود و در رویداد کلیک عملیات جمع را مینویسیم

    protected void btnAdd_Click(object sender, EventArgs e)  
    {  
        //txtFirstNumber value to be assigned to Num1 variable.  
        Num1 = Convert.ToDecimal(txtFirstNumber.Text);  
        //txtSecondNumber value to be assigned to Num2 variable.  
        Num2 = Convert.ToDecimal(txtSecondNumber.Text);  
        MathOp2 m = new MathOp2();  
        Decimal additon = m.Add(Num1, Num2);  
        lblResult.Text = (Num1 + ("+" + (Num2 + ("=" + additon))));  
        lblResult.ForeColor = Color.Green;  
        //this is pretty simple  
        //if your not selected any item in listbox it's save your result as a new record in database.  
        //if your selected any item in listbox it's update your result with existing record in database.  
        if (ListBox1.SelectedValue == string.Empty)  
        {  
            saveResult();  
        }   
        else   
        {  
            UpdateResult();  
        }  
    }  

و حال دراین مرحله برای نوشتن عملیات تفریق روی دکمه "-" کلیک کرده و کد های زیر را در رویداد Click آن مینویسیم

    protected void btnSubtract_Click(object sender, EventArgs e)  
    {  
        Num1 = Convert.ToDecimal(txtFirstNumber.Text);  
        Num2 = Convert.ToDecimal(txtSecondNumber.Text);  
        MathOp2 m = new MathOp2();  
        Decimal subtraction = m.Subtract(Num1, Num2);  
        lblResult.Text = (Num1 + ("-" + (Num2 + ("=" + subtraction))));  
        lblResult.ForeColor = Color.Green;  
        if (ListBox1.SelectedValue == string.Empty) saveResult();  
        else UpdateResult();  
    }  

و برای ضرب و تقسیم هم به ترتیب روی رویداد های Click هر کدام قطعه کد های مربوط به خود آن عملیات را مینویسم

لازم بذکر است تمام این عملیات ها به صورت داده در بانک اطلاعاتی ذخیره میشوند

عملیات ضرب:




    protected void btnMultiply_Click(object sender, EventArgs e)  
    {  
        Num1 = Convert.ToDecimal(txtFirstNumber.Text);  
        Num2 = Convert.ToDecimal(txtSecondNumber.Text);  
        MathOp2 m = new MathOp2();  
        Decimal division = m.Mul(Num1, Num2);  
        lblResult.Text = (Num1 + ("*" + (Num2 + ("=" + division))));  
        lblResult.ForeColor = Color.Green;  
        if (ListBox1.SelectedValue == string.Empty) saveResult();  
        else UpdateResult();  
    }  

عملیات تقسیم:

protected void btnDivide_Click(object sender, EventArgs e)  
{  
    Num1 = Convert.ToDecimal(txtFirstNumber.Text);  
    Num2 = Convert.ToDecimal(txtSecondNumber.Text);  
    // if txtSecondNumber value is zero, then the result would be infinite.  
    // To prevent that make one alert for user that "Divide By Zero is Invalid"  
    if (Num2 == 0)   
    {  
        lblMsg.Text = "Divide By Zero is Invalid";  
        lblMsg.ForeColor = Color.Red;  
        return;  
    }  
    MathOp2 m = new MathOp2();  
    Decimal division = m.Div(Num1, Num2);  
    lblResult.Text = (Num1 + ("/" + (Num2 + ("=" + division))));  
    lblResult.ForeColor = Color.Green;  
    if (ListBox1.SelectedValue == string.Empty) saveResult();  
    else UpdateResult();  
} 

و حال در این قسمت از آموزش قصد  داریم که اطلاعات وارد شده در بانک از اطلاعاتی را پاک کنیم ،برای این کار کافی است روی دکمه "حذف " دوبار کلیک کرده و قطعه کد زیر را در رویداد Click آن بنویسیم

protected void btnDelete_Click(object sender, EventArgs e)   
{  
    lblResult.Text = string.Empty;  
    lblMsg.Text = string.Empty;  
    for (int i = 0; i <= ListBox1.Items.Count - 1; i++)  
    {  
        if (ListBox1.Items[i].Selected != false)  
        {  
            DeleteFromListView(Convert.ToInt32(ListBox1.Items[i].Value));  
        }  
    }  
    Clear();  
    ListBox1.Items.Clear();  
    BindResultsToListview();  
    lblMsg.Text = "Selected Value deleted successfully";  
}  
ListBox1_SelectedIndexChanged  
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) {  
    lblMsg.Text = string.Empty;  
    if (ListBox1.SelectedValue == string.Empty)  
    {  
        return;  
    }  
    int ? id = null;  
    string selectedtext = null;  
    foreach(ListItem li in ListBox1.Items)   
    {  
        if (li.Selected == true)  
        {  
            id = Convert.ToInt32(ListBox1.SelectedValue);  
        }  
    }  
    SqlConnection con = new SqlConnection(constr);  
    SqlDataAdapter adpt = new SqlDataAdapter("Select * from MathRresults Where Id = '" + id + "'", con);  
    DataSet ds = new DataSet();  
    adpt.Fill(ds, "MathRresults");  
    DataTable myDataTable = ds.Tables[0];  
    if (ds.Tables.Count > 0 && ds != null && ds.Tables[0].Rows.Count > 0)  
    {  
        selectedtext = ds.Tables[0].Rows[0]["Result"].ToString();  
    }  
    //Split the item by the operator and the '=' into an array of strings  
    string[] parts = selectedtext.Split('+', '-', '*', '/', '=');  
    if (parts.Length > 2) {  
        //Define a variable for each part  
        string part1 = parts[0].Trim();  
        string part2 = parts[1].Trim();  
        string part3 = parts[2].Trim();  
        txtFirstNumber.Text = part1;  
        txtSecondNumber.Text = part2;  
        lblResult.Text = part3;  
    }  

و در آخر هم برای پاک کردن مقادیر وارد شده در TextBox ها کافیست قطعه کد زیر را در رویداد Click دکمه "پاک" بنویسیم

    protected void btnClear_Click(object sender, EventArgs e)
        {
          txtFirstNumber.Text = string.Empty;  
   txtSecondNumber.Text = string.Empty;  

        }

موفق و پیروز باشید

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید