【问题标题】:Cant get DataValueField with AutoCompleteBox WebForm无法使用 AutoCompleteBox WebForm 获取 DataValueField
【发布时间】:2013-06-28 18:07:12
【问题描述】:

我有一个 radAutoCompleteBox,只能获取 Text 属性,但我需要 ID。

我的 AppData.cs 方法:

public IEnumerable<Company> GetAllCompanies()
    {
        _companyRepository = new CompanyRepository();
        return _companyRepository.GetAll();
    }

我在 .aspx 文件上的 InsertTemplate:

<telerik:RadAutoCompleteBox ID="acCompany" runat="server" EmptyMessage="Empresas..." AllowCustomEntry="False" RenderMode="Lightweight"      DataSourceID="CompanyObjectDataSource"  DataTextField="TradeName"  DataValueField="IDCompany"    />

还有我在 .aspx 文件上的数据源:

asp:ObjectDataSource ID="CompanyObjectDataSource" runat="server" SelectMethod="GetAllCompanies" TypeName="Apontamento.DataSource"

还有我的 .cs 文件:

protected void radGrid1_OnInsertCommand(object sender, GridCommandEventArgs e)
    {
        var item = e.Item as GridEditFormItem;
        var company = (item.FindControl("acCompany") as RadAutoCompleteBox).Text;
        var idCompany = (item.FindControl("acCompany") as     RadAutoCompleteBox).DataValueField;
    }

所以,我只是不能让 idCompany 工作。它始终返回字符串值“IDCompany”,而不是 ID 实际值。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: c# asp.net .net webforms telerik


    【解决方案1】:

    RadControls for ASP.NET AJAX Documentation 看来,您需要处理EntryAdded 事件,如下所示:

    protected void RadAutoCompleteBox1_EntryAdded(object sender, AutoCompleteEntryEventArgs e)
    {
        // Label1 is made up here just for example's sake
        // e.Entry.Text will give you the name selected
        // e.Entry.Value will give you the ID selected
        Label1.Text = e.Entry.Value + " was added.";
    }
    

    【讨论】:

    • 是的,但是有了这个我会得到文本,而不是 DataValueField(我用 CompanyID 属性指定)。
    • 这似乎与文档所述相反,e.Entry.Texte.Entry.Value 的值相同(即文本而不是 DataValueField)?换句话说,ID 的值是否完全进入了自动完成框?
    【解决方案2】:

    看起来,没有像使用 RadComboBox 那样获取 id 的简单方法,但您可以遍历 Entries 并逐个文本查找项目。这些方面的东西(未经测试):

      var autoCompleteBox = (item.FindControl("acCompany") as RadAutoCompleteBox);
        int idCompany = 0;
        if (autoCompleteBox !=null)
        {
           foreach (AutoCompleteBoxEntry entry in autoCompleteBox.Entries)
                    {
                        if (entry.Text == autoCompleteBox.Text)
                        {
                            idCompany = Convert.ToInt32(entry.Value);
                            break;
                        }
                    }
        }
    

    【讨论】:

    • 它必须有一个最简单的方法。
    • @ggui,AFAIK,没有更简单的方法。不过,您可能会有更好的运气来寻求 Telerik 的支持。不要忘记在这里发布答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2011-10-23
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多