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# 如何基于另一个DropDownList填充DropDownList_C#_Asp.net - Fatal编程技术网

C# 如何基于另一个DropDownList填充DropDownList

C# 如何基于另一个DropDownList填充DropDownList,c#,asp.net,C#,Asp.net,我正在做一个基于项目清单的销售订单。 我有两个下拉列表。第一个下拉列表从Projects表中检索数据。第二个下拉列表是基于从第一个下拉列表中选择的值填充数据 下面显示了项目和任务下拉列表的源代码 问题是,每次我打开销售订单表单时,默认的DataTextValue不是我在源代码中声明的“选择项目”,而是显示第一条记录 另一件事是,我觉得代码仍然有一些问题,我只是无法确定是哪一个 如果您有任何澄清,请告诉我。您需要从您的aspx中删除DataTextField=“选择一个项目…”DataValu

我正在做一个基于项目清单的销售订单。 我有两个下拉列表。第一个下拉列表从Projects表中检索数据。第二个下拉列表是基于从第一个下拉列表中选择的值填充数据

下面显示了项目和任务下拉列表的源代码



问题是,每次我打开销售订单表单时,默认的DataTextValue不是我在源代码中声明的“选择项目”,而是显示第一条记录

另一件事是,我觉得代码仍然有一些问题,我只是无法确定是哪一个


如果您有任何澄清,请告诉我。

您需要从您的aspx中删除
DataTextField=“选择一个项目…”DataValueField=“AutoId”
。这是在代码中定义的

添加第一个选项并设置
AppendDataBoundItems=true

ddlProjects.Items.Add(new ListItem("Select a project...",""));
ddlProjects.AppendDataBoundItems = true;
ddlProjects.DataSource = dr;
ddlProjects.DataTextField = "Name";
ddlProjects.DataValueField = "ProjectID";
ddlProjects.DataBind();
确保未选择空项

protected void ddlProjects_SelectedIndexChanged(object sender, EventArgs e)
{
    ddlTasks.Items.Clear();
    int ID = 0;
    if (int.TryParse(ddlProjects.SelectedValue, out ID))
    {
        DataTable table = new DataTable();
        string sql = "SELECT TaskID, Name FROM ProjectTasks WHERE ProjectID = @ProjectID";
        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.Connection = con;
        SqlDataAdapter ad = new SqlDataAdapter(cmd);
        cmd.Parameters.AddWithValue("@ProjectID", ID);
        ad.Fill(table);
        ddlTasks.DataTextField = "Name";
        ddlTasks.DataSource = table;
        ddlTasks.DataBind();
    }
}

它可以工作,但每次我回选“选择项目…”值时,我都会在“var ID=int.Parse(ddlProjects.SelectedValue);”处收到一个错误输入字符串的格式不正确。最好的选择是检查
ddlProjects\u SelectedIndexChanged
中的选定值,确保其有效,如果无效,则清除
ddlstasks
。很抱歉,我没有得到该值。感谢它工作得很好,这正是我要找的:)我刚刚编辑了一些对齐
ddlProjects.Items.Add(new ListItem("Select a project...",""));
ddlProjects.AppendDataBoundItems = true;
ddlProjects.DataSource = dr;
ddlProjects.DataTextField = "Name";
ddlProjects.DataValueField = "ProjectID";
ddlProjects.DataBind();
protected void ddlProjects_SelectedIndexChanged(object sender, EventArgs e)
{
    ddlTasks.Items.Clear();
    int ID = 0;
    if (int.TryParse(ddlProjects.SelectedValue, out ID))
    {
        DataTable table = new DataTable();
        string sql = "SELECT TaskID, Name FROM ProjectTasks WHERE ProjectID = @ProjectID";
        SqlCommand cmd = new SqlCommand(sql, con);
        cmd.Connection = con;
        SqlDataAdapter ad = new SqlDataAdapter(cmd);
        cmd.Parameters.AddWithValue("@ProjectID", ID);
        ad.Fill(table);
        ddlTasks.DataTextField = "Name";
        ddlTasks.DataSource = table;
        ddlTasks.DataBind();
    }
}