Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从下拉列表中动态填充文本框不工作_C#_Asp.net - Fatal编程技术网

C# 从下拉列表中动态填充文本框不工作

C# 从下拉列表中动态填充文本框不工作,c#,asp.net,C#,Asp.net,我试图在下拉列表中选择其值时填充两个文本框(我希望文本框中的数据在选择更改而不重新加载页面时更改),我编写了一些代码编译从其他类似问题中收集到的内容,但出于某种原因,我的CS在这里不起作用 public partial class UsersFormPage : Page { protected void userddlistedit_SelectedIndexChanged(object sender, EventArgs e) { FillBoxes(user

我试图在下拉列表中选择其值时填充两个文本框(我希望文本框中的数据在选择更改而不重新加载页面时更改),我编写了一些代码编译从其他类似问题中收集到的内容,但出于某种原因,我的CS在这里不起作用

public partial class UsersFormPage : Page
{
    protected void userddlistedit_SelectedIndexChanged(object sender, EventArgs e)
    {
        FillBoxes(userddlistedit.SelectedValue);
    }

    private void FillBoxes(string HR_ID)
    {
        // Create a new dataset object
        DataSet dt = new DataSet();
        // Create SqlConnection
        using (SqlConnection conn = new SqlConnection())
        {
            conn.ConnectionString = "Data Source=SQL2008R2SRV;Initial Catalog=employeetrainingtracking;Integrated Security=True";
            conn.Open();
            using (SqlCommand cmd = new SqlCommand())
            {
                // Set the connection on the sql command object
                cmd.Connection = conn;
                cmd.CommandText = "select * from users where HR_ID='" + HR_ID + "'";
                using (SqlDataAdapter adap = new SqlDataAdapter(cmd))
                {
                    adap.Fill(dt);
                }
            }
        }
        if (dt.Tables[0].Rows.Count > 0)
        {
            usernameedit.Text = dt.Tables[0].Rows[0]["Username"].ToString(); //Where column name us the Fields for your Table that you wanted to display in the TextBoxes
            passwordedit.Text = dt.Tables[0].Rows[0]["Password"].ToString();
        }
    }
}
以下是我的页面影响的部分:

  <li class="form-row text-row">
    <label>User:</label>
      <asp:DropDownList ID="userddlistedit" runat="server" CssClass="text-input-dds" DataSourceID="personnelsql" DataTextField="HR_ID" DataValueField="HR_ID" AutoPostBack="True" OnSelectedIndexChanged="userddlistedit_SelectedIndexChanged" />
  </li>
  <li class="form-row text-input-row">
    <label>Username:</label>
    <asp:TextBox name="usernameedit" type="text" class="text-input-lg required" id="usernameedit" runat="server" AutoPostBack="True" />                     
  </li>
  <li class="form-row text-input-row">
    <label>Password:</label>
    <asp:TextBox name="passwordedit" type="text" class="text-input-lg required" id="passwordedit" runat="server" AutoPostBack="True" />
  </li>
  • 用户:
  • 用户名:
  • 密码:
  • 我似乎不明白为什么它不起作用

    这是我的下拉列表的数据源:

                          <asp:SqlDataSource ID="personnelsql" runat="server" 
                          ConnectionString="<%$ ConnectionStrings:employeetrainingtrackingConnectionString %>" 
                          SelectCommand="SELECT * FROM personnel ORDER BY HR_ID">
                      </asp:SqlDataSource>
    

    我找出了我遗漏的内容,因此我将代码发布在下面,以便人们可以使用它:

    以下是CS页面上的代码:

    protected void userddlistedit_SelectedIndexChanged(object sender, EventArgs e)
    {
        string selectSQL;
        selectSQL = "SELECT * FROM users ";
        selectSQL += "WHERE HR_ID='" + userddlistedit.SelectedItem.Value + "'";
        SqlConnection con = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand(selectSQL, con);
        SqlDataReader reader;
    
        try
        {
            con.Open();
            reader = cmd.ExecuteReader();
            reader.Read();
    
            usernameedit.Text = reader["Username"].ToString();
            passwordedit.Text = reader["Password"].ToString();
            accessleveledit.SelectedValue = reader["AccessLevel"].ToString();
            reader.Close();
            lblResults.Text = "";
        }
        finally
        {
            con.Close();
        }
    }
    
    private void UsersListDD()
    {
        userddlist.Items.Clear();
        userddlistedit.Items.Clear();
        userddlistdelete.Items.Clear();
        string selectSQL = "SELECT * FROM personnel";
    
        SqlConnection con = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand(selectSQL, con);
        SqlDataReader reader;
    
        try
        {
            con.Open();
            reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                ListItem newItem = new ListItem();
                newItem.Text = reader["FirstName"] + " " + reader["LastName"];
                newItem.Value = reader["HR_ID"].ToString();
                userddlist.Items.Add(newItem);
                userddlistedit.Items.Add(newItem);
                userddlistdelete.Items.Add(newItem);
            }
            reader.Close();
        }
        finally
        {
            con.Close();
        }
    }
    
    这是实际aspx页面中的代码,我添加了两件事: -我添加了DropDownExtender -我添加了触发器(在标记之后但在标记之前)

    <li class="form-row text-row">
                    <label>User:</label>
                      <asp:DropDownList ID="userddlistedit" runat="server" CssClass="text-input-dds" AutoPostBack="True" OnSelectedIndexChanged="userddlistedit_SelectedIndexChanged"></asp:DropDownList>
                  </li>
                  <li class="form-row text-input-row">
                    <label>Username:</label>
                    <asp:TextBox name="usernameedit" type="text" class="text-input-lg required" id="usernameedit" runat="server"></asp:TextBox>
                    <asp:DropDownExtender ID="ExtenderUserEdit" DropDownControlID="userddlistedit" Enabled="true" TargetControlID="usernameedit" runat="server"></asp:DropDownExtender>
                    <asp:RequiredFieldValidator runat="server" ID="ValidateUsernameEdit" ControlToValidate="usernameedit" ErrorMessage="Username is required" Display="dynamic" ValidationGroup="EditSection">*</asp:RequiredFieldValidator>
                  </li>
                  <li class="form-row text-input-row">
                    <label>Password:</label>
                    <asp:TextBox name="passwordedit" type="text" class="text-input-lg required" id="passwordedit" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator runat="server" ID="ValidatePasswordEdit" ControlToValidate="passwordedit" ErrorMessage="Password is required" Display="dynamic" ValidationGroup="EditSection">*</asp:RequiredFieldValidator>
                  </li>  
    

    希望这对其他人有所帮助。

    在填充下拉列表的地方,您的页面加载为空???您好。感谢您的帮助。我编辑了我的问题,为我的下拉列表添加了数据源。这就是您所指的吗?您是否已通过输入break进行了检查?正在运行以填充控件的代码已在serve中完成因此,为了重新绑定页面控件,您不可避免地必须回发到服务器。如果您想要这种类型的功能,则必须在客户端完成(使用Javascript/JQuery),但即使如此,您的应用程序也必须运行服务器端代码才能从数据库中获取数据。同样重要的是,要记住,任何回服务器的帖子都会导致页面再次加载,您必须注意正确地重新绑定控件。因此,从您的vie角度来看,这段代码是否很好,但它需要一个javascript函数来升级吃了这一页?
    private void UsersListDD()
    {
        userddlist.Items.Clear();
        userddlistedit.Items.Clear();
        userddlistdelete.Items.Clear();
        string selectSQL = "SELECT * FROM personnel";
    
        SqlConnection con = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand(selectSQL, con);
        SqlDataReader reader;
    
        try
        {
            con.Open();
            reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                ListItem newItem = new ListItem();
                newItem.Text = reader["FirstName"] + " " + reader["LastName"];
                newItem.Value = reader["HR_ID"].ToString();
                userddlist.Items.Add(newItem);
                userddlistedit.Items.Add(newItem);
                userddlistdelete.Items.Add(newItem);
            }
            reader.Close();
        }
        finally
        {
            con.Close();
        }
    }