在用户控件中设置下拉列表的选定值

4

有人能帮我将DropDownList的选定值设置为数据库给定的值吗?我有几个TextBox,从数据库设置值并不困难,但是DropDownList让我发疯。

 <asp:TextBox ID="txtNaziv" runat="server" Width="430px" Text='<%# DataBinder.Eval(Container, "DataItem.Naziv") %>'></asp:TextBox>

据我所知,无法从代码前端设置DropDownList的选定项值,但是我找到了类似于以下代码片段的内容(来自Telerik的RadGrid文档):
        protected void EmployeeDetails_DataBinding(object sender, System.EventArgs e)
    {
        ArrayList tocs = new ArrayList(new string[] { "Dr.", "Mr.", "Mrs.", "Ms." });

        ddlTOC.DataSource = tocs;
        ddlTOC.DataBind();

        object tocValue = DataBinder.Eval(DataItem, "TitleOfCourtesy");

        if (tocValue == DBNull.Value)
        {
            tocValue = "Mrs.";
        }
        ddlTOC.SelectedIndex = tocs.IndexOf((string)tocValue);
        ddlTOC.DataSource = null;
    }

问题是我正在使用Linq-to-SQL,但不确定如何重新创建类似上述代码的东西。这是我目前拥有的:

        protected void ddlTip_DataBinding(object sender, EventArgs e)
    {
        TSEntities db = new TSEntities();

        var partType = (from pt in db.PartType
                       select new { pt.idPartType, pt.Naziv }).ToArray();

        ddlTip.DataSource = partType;
        ddlTip.DataTextField = "Naziv";
        ddlTip.DataValueField = "idPartType";
        ddlTip.DataBind();

        object Tip = DataBinder.Eval(DataItem, "idPartType");

    }

我还需要补充一点,这些文本框和下拉列表框都在一个用户控件中,该用户控件被用于Telerik的RadGrid的编辑表单中。

如果能得到帮助将不胜感激。

谢谢!

2个回答

4

您需要设置下拉列表的SelectedValue:

ddlTOC.SelectedValue = tocValue;

你也可以这样做:
ListItem li = ddlTOC.Items.FindByValue(tocValue);
if (li != null)
    li.Selected = true;

编辑: 包括绑定列表直接到 db.PartType 的代码:

TSEntities db = new TSEntities();       

ddlTip.DataSource = db.PartType; 
ddlTip.DataTextField = "Naziv"; 
ddlTip.DataValueField = "idPartType"; 
ddlTip.DataBind(); 

ddlTip.SelectedValue = DataBinder.Eval(DataItem, "idPartType").ToString();

谢谢,那可能对于中间的代码很好,但我的情况是使用LINQ-to-SQL,我认为它有些不同。 - wegelagerer
@Hrvach:听起来你真正需要帮助的是代码中的LINQ-to-SQL部分。 - James Johnson
db.PartType是一个表,它只有两个字段;idPartType和Naziv(名称)。错误信息不太清楚,我的WebApp崩溃了,我必须从Visual Studio 2010重新运行WebServer(CTRL + F5)。好的,问题肯定出在我尝试将数据绑定到DropDownList上。 - wegelagerer
@Hrvach:你真的需要在那里使用LINQ吗?你没有过滤结果;你不能直接将db.PartType绑定到列表中吗? - James Johnson
@Hrvach:是的,我认为DataBinding事件不是最好的地方来做这件事。我认为你的列表已经在这个时候绑定了,而且你的代码一遍又一遍地重新绑定了列表。你应该在Page_Load上绑定列表,并在调用DataBind()后要么在OnDataBinding中设置值,要么在Page_Load中设置值。 - James Johnson
显示剩余7条评论

0

试试这个

ddlTip.Items.FindByValue(tocs).Selected = true;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接