【问题标题】:How do I populate a droplist dynamically that is nested in a Form View using a datatable?如何使用数据表动态填充嵌套在表单视图中的下拉列表?
【发布时间】:2014-01-27 20:54:29
【问题描述】:

我正在尝试使用来自SQL 的数据并使用数据表填充asp:DropDownList。但是,我收到错误 'CreatedByDropList' has a SelectedValue 无效,因为它不存在于项目列表中。参数名称:值

asp:DropDownList 位于表单视图中,其选择由网格视图填充。

这是 Formview 的 Edit and Insert 模板中 DropList 控件的 HTML:

<asp:DropDownList ID="CreatedByDropList" AppendDataBoundItems="true" SelectedValue='<%# Bind("CreatedBy") %>' runat="server" />

下面是代码:

protected void FormView1_DataBound(object sender, EventArgs e)
{
    if (FormView1.CurrentMode == FormViewMode.Insert)
    {
        DropDownList ddlCreatedBy = FormView1.FindControl("CreatedByDropList") as DropDownList; //Placed BreakPoint Here

        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MySqlServer"].ConnectionString))
        {
            SqlCommand cmd = new SqlCommand(@"SELECT RLS.RoleName [RoleName], URS.UserID [UserID], USRS.UserName[UserName], USRS.FirstName[FirstName], USRS.LastName[LastName]
                                                FROM [Roles] RLS Inner JOIN [Users] USRS LEFT JOIN [UserRoles] URS 
                                                ON USRS.[UserID] = URS.[UserID] ON RLS.[RoleID] = URS.[RoleID] 
                                                WHERE RLS.[RoleName] = 'Blog Editors'",conn);
            conn.Open();
            using (SqlDataReader reader1 = cmd.ExecuteReader())
            {
                while (reader1.Read())
                {
                    int numUserID = reader1.GetInt32(1);
                    string strFirstName = reader1.GetString(3);
                    string strLastName = reader1.GetString(4);
                    string newUserName = strFirstName + " " + strLastName;
                }

                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    ddlCreatedBy.DataSource = dt;
                    ddlCreatedBy.DataTextField = "newUserName";//Placed BreakPoint Here
                    ddlCreatedBy.DataValueField = "numUserID";//Placed BreakPoint Here
                    ddlCreatedBy.DataBind();
            }



        }

}

我在整个过程中放置​​了断点以进行一些故障排除,但调试窗口始终保持空白(意味着所有调试窗口都是空白且无用)。

【问题讨论】:

    标签: c# asp.net sql-server webforms formview


    【解决方案1】:

    阅读器 1 没有做任何事情。它只是迭代从命令返回的所有行,将它们分配给变量,然后不对它们做任何事情,就这个 sn-p 显示。

    此外,您的 DataTable 中没有任何名为“newUserName”或“numUserId”的列。将最后 4 行更改为:

    foreach(DataRow row in dt.Rows)
    {
        ddlCreatedBy.Items.Add(new ListItem(row["FirstName"] + " " + row["LastName"], row["UserId"]);
    }
    

    【讨论】:

    • 这给了我以下错误“无法从对象转换为字符串”
    猜你喜欢
    • 2017-10-12
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多