Member 12605293 Ответов: 4

Столкнувшись с ошибкой при связывании страны и штата


Привет я новичок в asp.net я сделал регистрационную форму, и мне нужно связать страну и штат в моей заявке, т. е. когда я выбираю страну, мне нужно, чтобы отображалось состояние, связанное с ней.У меня есть подробная информация об этом в SQL server.
Также нужно выбрать dob и получить возраст автоматически мольбы помочь мне.заранее спасибо

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;


namespace Test
{
    public partial class RegistrationForm : System.Web.UI.Page
    {
        //string CS = ConfigurationManager.ConnectionStrings["sqlconnection"].ConnectionString;
        SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlconnection"].ConnectionString);


        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindAll();
            }
        }

        public void BindAll()
        {
            cn.Open();
            SqlCommand cmd = new SqlCommand("select CountryName,CounID from Country_details", cn);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            DDlCountry.DataSource = dt;
            DDlCountry.DataTextField = "CountryName";
            DDlCountry.DataValueField = "CounID";
            DDlCountry.DataBind();
            cn.Close();
        }
        public void Bind_ddlState()
        {
            cn.Open();

            SqlCommand cmd = new SqlCommand("select StateName,CounID from State_details where CounID='" + DDlCountry.SelectedValue + "'", cn);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            Ddlstate.DataSource = dt;
            Ddlstate.DataTextField = "StateName";
            Ddlstate.DataValueField = "CounID";
            Ddlstate.DataBind();
            Ddlstate.Enabled = true;
            cn.Close();
        }




        protected void txtDOB_SelectionChanged(object sender, EventArgs e)
        {

        }




        protected void Button1_Click1(object sender, EventArgs e)
        {
            {
                cn.Open();
                SqlCommand cmd = new SqlCommand("INSERT INTO RegistrationDetails1 (Name, Department,Salary,Doj,Dob, Age,Country,State,Phone,Email) VALUES ('" + txtname.Text + "','" + txtDept.Text + "','" + txtSalary.Text + "','" + txtDOJ.Text + "','" + txtDOB.Text + "','" + txtAge.Text + "','" + DDlCountry.Text + "','" + Ddlstate.Text + "','" + txtPhone.Text + "','" + TxtEmail.Text + "','" + txtPin.Text + "' )", cn);
                cmd.ExecuteNonQuery();
                cn.Close();
            }

        }


        protected void Button2_Click1(object sender, EventArgs e)
        {
            this.ClearCachedClientID();

        }



        protected void cal()
        {

            if (Calendar2.Visible == false)
            {
                Calendar2.Visible = true;

            }
            else
            {
                Calendar2.Visible = false;
            }
            if (Calendar1.Visible == false)
            {
                Calendar1.Visible = true;
            }
            else
            {
                Calendar1.Visible = false;
            }
        }

        protected void Calendar2_SelectionChanged(object sender, EventArgs e)
        {
            txtDOB.Text = Convert.ToString(Calendar1.SelectedDate);
        }

        protected void txtDOB_TextChanged(object sender, EventArgs e)
        {

        }

        protected void DDlCountry_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        protected void ddltest_SelectedIndexChanged(object sender, EventArgs e)
        {
            Bind_ddlState();
        }




    }
}

DamithSL

Вам нужно объяснить, какая часть вашего кода не работает, какие исключения вы получаете и т. д..

Member 12605293

Привет, Дамит.
Страна является обязательной должным образом, но государство не является обязательным, когда я выбираю конкретную страну.

Календарный контроль даты рождения не показывает возраст.

4 Ответов

Рейтинг:
17

Ramesh Kumar Barik

1. Звоните Bind_ddlState() от DDlCountry_SelectedIndexChanged (..) событие, а метод вызывается из разных событий.
2. Установите AutoPostback= "true"для DDLCountry в режиме конструктора или в окне свойств.


Member 12605293

Привет Да, я сделал то же самое, но это показывает только первую ценность как страны, так и государства.

Ramesh Kumar Barik

Проблема : SqlCommand cmd = new SqlCommand ("select StateName, CounID from State_details where CounID='" + DDlCountry.SelectedValue + "'", cn);

Запрос, о котором вы упомянули, выбирает имя состояния с идентификатором страны из таблицы state_Details. Но вы должны выбрать StateName с StateID для StateDropdownlist, для которого stateID будет выбран для StateDropdownlist.

Здесь CounID всегда совпадает с параметром, который вы используете в условии where.

1. Поэтому, пожалуйста, изменить Statename запрос с StateID для Statedropdownlist.

Ex: SqlCommand cmd = new SqlCommand ("select StateName, StateID from State_details where CounID='" + DDlCountry.SelectedValue + "'", cn);

2. Ddlstate.DataValueField = " StateID";

Member 12605293

Привет Спасибо за ответ.Я использовал одно и то же имя столбца CounID в обеих таблицах .

Ramesh Kumar Barik

Спасибо.
один вопрос.
Как вы связываете свою родительскую таблицу (Country_details) и дочернюю таблицу (State_details).

Есть ли собственный идентификатор для State_details?
Если да, то выберите этот идентификатор и свяжите его с StateDropDownlist.

Member 12605293

Привет
У меня есть общий идентификатор для обеих таблиц(CounID)

Ramesh Kumar Barik

Затем как вы извлекаете данные из таблицы состояний для конкретной страны.

Согласно запросу " SqlCommand cmd = new SqlCommand ("select StateName, CounID from State_details where CounID='" + DDlCountry.SelectedValue + "'", cn);" он всегда выбирает ту же страну, что и вы, передавая одно и то же имя столбца в условии, а также в операторе select.

Поместите этот запрос в окно sql-запроса.
1. Выберите CountryName, CounID из списка Country_details.
2. выберите StateName,CounID от State_details где CounID = 1 // пусть устанавливают 1 например.

Рейтинг:
1

DamithSL

Цитата:
Страна является обязательной должным образом, но государство не является обязательным, когда я выбираю конкретную страну.

есть несколько вещей, которые вам нужно отметить, одна из них AutoPostBack должно быть верно для DDlCountry как показано ниже и вам нужно правильно указать выбранное имя события изменения индекса
<asp:DropDownList id="DDlCountry" runat="server" AutoPostBack="true" OnSelectIndexChanged="DDlCountry_SelectedIndexChanged"/>

теперь измените DDlCountry_SelectedIndexChanged как показано ниже
protected void DDlCountry_SelectedIndexChanged(object sender, EventArgs e)
      {
        Bind_ddlState();
      }


Рейтинг:
1

Member 12605293

<pre>%@ Page Language="C#" AutoEventWireup="true" CodeBehind="RegForm1.aspx.cs" Inherits="Test.RegistrationForm" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
    <style>
        input[type=label] {
    border: 2px solid Blue;
    border-radius: 2px;
}

        input[type=text] {
    border: 2px solid red;
    border-radius: 4px;
}
   body {
    background-color: lightblue;
}
        </style>
    <title>Database</title>
    <script type="text/javascript">

        
        function Valid1(e, t) {
            try {
                if (window.event) {
                    var charCode = window.event.keyCode;
                }
                else if (e) {
                    var charCode = e.which;
                }
                else { return true; }
                if ((charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123))
                    return true;
                else
                    return false;
            }
            catch (err) {
                alert("Invalid ");
            }
        }
        function Valid2(e, r) {
            try {
                if (window.event) {
                    var charCode = window.event.keyCode;
                }
                else if (e) {
                    var charCode = e.which;
                }
                else { return true; }
                if ((charCode > 47 && charCode < 91) )
                    return true;
                else
                    return false;
            }
            catch (err) {
                alert("Invalid ");
            }
        }
        function Valid2(e, r) {
            try {
                if (window.event) {
                    var charCode = window.event.keyCode;
                }
                else if (e) {
                    var charCode = e.which;
                }
                else { return true; }
                if ((charCode > 47 && charCode < 91))
                    return true;
                else
                    return false;
            }
            catch (err) {
                alert("Invalid ");
            }
        }
        function Valid4(e, r) {
            try {
                if (window.event) {
                    var charCode = window.event.keyCode;
                }
                else if (e) {
                    var charCode = e.which;
                }
                else { return true; }
                if ((charCode > 41 && charCode < 58))
                    return true;
                else
                    return false;
            }
            catch (err) {
                alert("Invalid ");
            }
        }
        function IsValidEmail(email) {
            var expr = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
            return expr.test(email);
        };
        function ValidateEmail() {
            var email = document.getElementById("txtEmail").value;
            if (!IsValidEmail(email)) {
                alert("Invalid email address.");
            }
            else {
                alert("Valid email address.");
            }
        }
        function ageCount() {
            var date1 = new Date();
            var dob= document.getElementById("dob").value;
            var date2=new Date(dob);
            var pattern = /^\d{1,2}\/\d{1,2}\/\d{4}$/; //Regex to validate date format (dd/mm/yyyy)
            if (pattern.test(dob)) {
                var y1 = date1.getFullYear(); //getting current year
                var y2 = date2.getFullYear(); //getting dob year
                var age = y1 - y2; //calculating age 
                document.write("Age : " + age);
                return true;
            } else {
                alert("Invalid date format. Please Input in (dd/mm/yyyy) format!");
                return false;
            }
        function onlyAlphabets(e, t) {
            try {
                if (window.event) {
                    var charCode = window.event.keyCode;
                }
                else if (e) {
                    var charCode = e.which;
                }
                else { return true; }
                if ((charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123))
                    return true;
                else
                    return false;
            }
            catch (err) {
                alert("Invaild");
            }
        }
        
        
        
        

 </script>
</head>
    
<body>
    <form id="form1" runat="server">
        <div>
            <table border="0">
                
                <tr>
                    <th colspan="3">Registration
                    </th>
                </tr>
                <tr>
                    <td style="width: 362px">Name
                    </td>
                    
                    <td>
                        <asp:TextBox ID="txtname" runat="server" onkeypress ="Valid1(e, t) " ControlToValidate="txtname"/>
                        
                        
                    </td>
                    <td>
                         </td>
                    <td style="width: 662px">
                        <asp:RequiredFieldValidator ErrorMessage="Required" ForeColor="" ControlToValidate="txtname"

                            runat="server" />
                    </td>
                </tr>
                <tr>
                    <td style="width: 362px">Department
                    </td>
                    <td>
                        <asp:TextBox ID="txtDept" runat="server" />
                        <input type="text" onkeypress="return Valid2(event,this);" /> 
                    </td>
                    <td style="width: 662px">
                        <asp:RequiredFieldValidator ErrorMessage="Required" ForeColor="" ControlToValidate="txtDept"

                            runat="server" />
                    </td>
                </tr>
                <tr>
                    <td style="width: 362px">Salary
                    </td>
                    <td>
                        <asp:TextBox ID="txtSalary" runat="server" onkeypress="return Valid4(event,this);" />
                    </td>
                    <td style="width: 662px">
                        <asp:CompareValidator ErrorMessage="Required" ForeColor=""

                            ControlToValidate="txtSalary" runat="server" />
                    </td>
                </tr>

                <tr>
                    <td style="width: 362px">DOJ
                    </td>
                    <td>
                        <asp:TextBox ID ="txtDOJ" runat="server" />
                    </td>
                                   
                <td>
                        <asp:Calendar ID="Calendar1" runat="server" onkeypress="return ValidateDate (sender, args)" BackColor="White" BorderColor="#999999" CellPadding="4" DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" Height="180px" Width="200px"  >
                       </asp:Calendar>
                    </td>
                    <td style="height: 1px; width: 662px;">
                        <%--<asp:RequiredFieldValidator ErrorMessage="Required" ForeColor=""
                            ControlToValidate="txtDOJ" runat="server" />--%>
                    </td>
                </tr>
                <tr>
                    <td style="width: 362px">DOB
                    </td>
                    <td>
                        <asp:TextBox ID ="txtDOB" runat="server" OnTextChanged="txtDOB_TextChanged1" />
                    </td>
                    <td>
                        <asp:Calendar ID="Calendar2" runat="server" onclick="return ageCount" BackColor="White" BorderColor="#999999" CellPadding="4" DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" Height="180px" Width="200px" >
                       </asp:Calendar>
                        
                    </td>
                    <td style="width: 662px">
                       <%-- <asp:RequiredFieldValidator ErrorMessage="Required" ForeColor=""
                            ControlToValidate="txtDOB" runat="server" />--%>
                    </td>
                </tr>
                <tr>
                    <td style="width: 362px">Age
                    </td>
                    <td>
                        <asp:TextBox ID="txtAge" onkeypress="return Valid4(event,this)" runat="server" />
                    </td>
                    <td style="width: 662px">
                        <asp:RequiredFieldValidator ErrorMessage="Required" ForeColor=""

                            ControlToValidate="txtAge" runat="server" />
                    </td>
                </tr>

                <tr>
                    <td style="width: 362px">Country
                    </td>
                    <td>
                        <asp:DropDownList ID="DDlCountry" runat="server" AutoPostBack="true" Height="21px" Width="122px" 

                            OnSelectedIndexChanged="DDlCountry_SelectedIndexChanged"></asp:DropDownList>
                        
                    </td>
                  <%--  <td style="width: 662px">
                        <


Рейтинг:
0

Wendelius

Одна большая проблема заключается в том, что вы непосредственно связываете значения с инструкцией SQL. Это оставляет вас широко открытыми для SQL-инъекций, проблем преобразования и т. д. Правильный способ-использовать Класс SqlParameter (System. Data.SqlClient)[^]

Другое дело, что вы не распоряжаетесь объектами, поэтому ресурсы не освобождаются правильно. Кроме того, вы должны добавить правильную обработку ошибок для обработки распространенных исключений.

Для примера взгляните на Правильное выполнение операций с базой данных[^]

Что касается календаря, то он выглядит так, как будто вы берете значение из Calendar1 в Calendar2_SelectionChanged. Это намеренно?


Member 12605293

Привет
Спасибо за ваш ответ.- Я тебя не обижаю.Вы можете сделать код здесь ?для календаря вопрос заключается в следующем: "Когда я выбираю дату рождения, возраст человека должен автоматически заполнять поле age txtbox".

Wendelius

Комментарии связаны с тем, как вы строите операторы SQL, поэтому вам следует взглянуть на них и устранить потенциальные проблемы.

По поводу календаря я написал вопрос Получаете ли вы дату от правильного контроля или нет

Что касается состояния, то, похоже, вы не расследуете, является ли это обратной связью. Попробуйте изменить код

if (! IsPostBack) {
Bind_ddlState();
}

Member 12605293

Привет Мика
Спасибо, что теперь он хорошо работает для привязки состояния.Но не понимаю, в чем проблема в случае с календарем.

Wendelius

Как уже было сказано, вы берете значение из элемента управления Calendar1 в обработчике событий Calendar2. Это правильный контроль? Также проверьте обратную связь

Member 12605293

Привет Да, у меня есть сомнения в валидации.Даже ни одна проверка не работает .