قوالب العناصر الشرطية مع RadCombobox
-
21-09-2019 - |
سؤال
لديّ 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();
}
}
}
امل ان يساعد!