استعلام LINQ إلى WebControl.Controls
-
05-07-2019 - |
سؤال
ولدي ثلاثة عناصر تحكم مربع نص على الصفحة
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"
OnTextChanged="TextBox_TextChanged" TabIndex="1">
<asp:TextBox ID="TextBox2" runat="server" AutoPostBack="True"
OnTextChanged="TextBox_TextChanged" TabIndex="2">
<asp:TextBox ID="TextBox3" runat="server" AutoPostBack="True"
OnTextChanged="TextBox_TextChanged" TabIndex="3">
و معالج الحدث
protected void TextBox_TextChanged(object sender, EventArgs e)
{
WebControl changed_control = (WebControl)sender;
var next_controls = from WebControl control in changed_control.Parent.Controls
where control.TabIndex > changed_control.TabIndex
orderby control.TabIndex
select control;
next_controls.DefaultIfEmpty(changed_control).First().Focus();
}
ومعنى هذا الرمز هو حدد تلقائيا مربع نص مع TabIndex المقبل بعد صفحة بعد الظهر (انظر <لأ href = "https://stackoverflow.com/questions/173810/autopostback-with-textbox-loses-focus-question من صنع-أكثر وضوحا "> المشكلة ليتل JB في ). في الواقع أتلقى InvalidCastException لأنه من المستحيل أن يلقي من System.Web.UI.LiteralControl (WebControl.Controls يحتوي في الواقع LiteralControls) لSystem.Web.UI.WebControls.WebControl.
وأنا مهتم هل من الممكن تعديل هذه aproach بطريقة أو بأخرى في الحصول على العمل الحل؟ شكرا لك!
المحلول
from control in changed_control
.Parent
.Controls
.OfType<WebControl>()
نصائح أخرى
ويجب أن تكون قادرة على استخدام الأسلوب OfType، فقط ليعود الضوابط من نوع معين.
ومنها مثلا.
var nextcontrols = from WebControl control in
Changed_control.Parent.Controls.OfType<TextBox>()... etc
والمشكلة هي أن LiteralControl لا يرث من WebControl. لا يمكن أن يكون التركيز على الرغم من ذلك لا بأس من عدم تحديدها. في بيان LINQ، إضافة شرط آخر التحقق من وجود WebControl. لذلك ينبغي أن where control.TabIndex > changed_control.TabIndex && control is WebControl
السطر حيث الخاص بك.