سؤال

لديّ 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>

سؤالي هو هذا. أرغب في إضافة عنصر أولي في القائمة المخصصة لـ "جميع الأقسام" وهو العنصر الافتراضي. يمكنني القيام بذلك بسهولة ، لكن المشكلة التي أواجهها هي أنني لا أقوم بتخزين إدخال "جميع الأقسام" في قاعدة البيانات ، ويظهر templating مساحة فارغة في بداية قائمة العناصر عند سحب مربع التحرير والسرد . أحاول معرفة ما إذا كان هناك أي طريقة لعلم القالب باستثناء العنصر الأول في القائمة؟

ملاحظة: لقد حاولت أيضًا القيام بشرط في 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})") %>

ثم أحصل على قائمة مع عنصر فارغ واحد في الأعلى والباقي يقرأ "جميع الأقسام".

كان عملي حول هذه المشكلة هو القيام ببعض الأشياء غير التقليدية مع جانب خادم LINQ ، لكن ذلك أجبرني على التخلص من كل التنسيق والتنسيق HTML.

هل كانت مفيدة؟

المحلول

يمكنك تحديد "جميع الأقسام" RadComboboxitem كعنصر ثابت في <Items> مجموعة. نظرًا لأنك قمت بتمكين خاصية appendDataboundItems ، فأنت لا ترغب في ربط مصدر البيانات الخاص بك حتى بعد التحكم في العناصر الثابتة بالفعل ؛ وإلا ستحصل على المساحة الفارغة التي تراها عند توسيع مربع التحرير والسرد. أيضا استخدام DataBinder.Eval(Container, "Text") لتقديم حقل القسم. منذ أن قمت بتعيين هذا الحقل ك 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();
        }
    }
}

امل ان يساعد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top