1

部門名と略語を表示するために使用している RadComboBox があります。各アイテムを次のように表示するために、LinqDataSource を持つアイテム テンプレートを使用しています。

DeptAbbr - (DeptName)

これを行うために使用しているコードは次のとおりで、正常に動作します。

<telerik:RadComboBox ID="rcbDepartments" runat="server" AppendDataBoundItems="True"
        OnInit="rcbDepartments_Init" DataTextField="DepartmentAbbr" AutoPostBack="True"
        DataSourceID="ldsDepartments" DataValueField="DepartmentID" HighlightTemplatedItems="true"
        NoWrap="true" Width="250px">
        <ItemTemplate>
            <div>
                <b>
                    <%# Eval("DepartmentAbbr")%></b><%# Eval("DepartmentName", " - ({0})") %>
            </div>
        </ItemTemplate>
    </telerik:RadComboBox>

私の質問はこれです。「すべての部門」のデフォルト項目であるリストに最初の項目を追加したいと考えています。私はこれを簡単に行うことができますが、私が抱えている問題は、データベースに「すべての部門」のエントリを保存していないため、コンボボックスをプルダウンすると、項目リストの先頭に空白が表示されることです。 . リストの最初の項目を除くすべての項目をテンプレート化する方法があるかどうかを調べようとしていますか?

注: また、次のように Eval で条件を実行しようとしました。

<b><%# (Eval("DepartmentAbbr") != null) ? Eval("DepartmentAbbr") : "All Departments" %></b><%# Eval("DepartmentName", " - ({0})") %>

ただし、データバインドされているアイテムのみを評価し、手動で貼り付けている最初のアイテムは評価しません。つまり、上記のステートメントを次のように変更すると、

<b><%# (Eval("DepartmentAbbr") == null) ? Eval("DepartmentAbbr") : "All Departments" %></b><%# Eval("DepartmentName", " - ({0})") %>

次に、上部に空白の項目が 1 つあり、残りの項目が「すべての部門」と表示されたリストを取得します。

この問題に対する私の回避策は、LINQ サーバー側でファンキーな選択を行うことでしたが、そのためにすべてのテンプレートと html フォーマットを取り除く必要がありました。

4

1 に答える 1

1

「すべての部門」の RadComboBoxItem を<Items>コレクション内の静的アイテムとして定義できます。AppendDataBoundItems プロパティを有効にしたので、コントロールが静的項目を既にバインドするまで、データ ソースにバインドしたくありません。そうしないと、コンボ ボックスを展開したときに表示される空白スペースが表示されます。また、DataBinder.Eval(Container, "Text")DepartmentAbbr フィールドのレンダリングにも使用します。このフィールドをDataTextFieldコントロールの として設定したため、その値は常にレンダリングされます。そうでない場合は、DepartmentAbbr が何であるかがわからないため、コントロールが静的項目にバインドされたときに再び空のスペースが取得されます。テキストフィールドしかありません。以下に例を示します。

<telerik:RadComboBox ID="RadComboBox1" runat="server"
    AppendDataBoundItems="True" 
    DataTextField="Abbr"
    AutoPostBack="True"
    DataValueField="DeptID" 
    HighlightTemplatedItems="true"
    NoWrap="true" 
    Width="250px">
    <Items>                
        <telerik:RadComboBoxItem runat="server" Text="All Departments" />
    </Items>
    <ItemTemplate>
        <div>
            <b><%# DataBinder.Eval(Container, "Text")%></b><%# Eval("Name", " - ({0})") %>
        </div>
    </ItemTemplate>
</telerik:RadComboBox>

public partial class _Default : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        RadComboBox1.Load += new EventHandler(RadComboBox1_Load);
    }

    protected void RadComboBox1_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // Ensure the static items are already bound before assigning
            // new data to the DataSource property
            RadComboBox1.DataBind();

            var departments = new[] { 
                new { DeptID = 1, Abbr = "ACME", Name = "ACME Corporation" },
                new { DeptID = 2, Abbr = "MSFT", Name = "Microsoft Corporation" },
                new { DeptID = 3, Abbr = "GOOG", Name = "Google, Inc" }
            };
            RadComboBox1.DataSource = departments;
            RadComboBox1.DataBind();
        }
    }
}

それが役立つことを願っています!

于 2010-01-13T01:54:31.770 に答える