Вместо выполнения if () для каждого типа элемента управления, есть ли приведение, которое позволит мне динамически устанавливать тип элемента управления? - PullRequest
2 голосов
/ 01 февраля 2010

Я перебираю свои элементы управления на этой веб-странице, и когда нажимается кнопка для изменения части данных, я отключаю другие элементы управления на странице.Такие элементы управления состоят из TextBoxes, ListBoxes и Buttons.Все эти элементы управления имеют свойство Enable, поэтому мне было интересно, есть ли способ просто привести элемент управления к какому-либо универсальному типу данных и установить его свойство enabled.измените верхнюю часть на что-то вроде

protected void DisableSQRcontrols( Control Page )
    {
        foreach ( Control ctrl in Page.Controls )
            if ( ( ctrl is TextBox ) ||
                 ( ctrl is Button  ) ||
                 ( ctrl is ListBox ) )
              ((UniversalControlCast)ctrl).Enabled = false;
            else if ( ctrl.Controls.Count > 0 )
                DisableSQRcontrols( ctrl );
    }

Ответы [ 4 ]

5 голосов
/ 01 февраля 2010

Да, большинство наследуется от WebControl, например:

System.Web.UI.WebControls.BaseDataBoundControl
System.Web.UI.WebControls.BaseDataList
System.Web.UI.WebControls.Button
System.Web.UI.WebControls.Calendar
System.Web.UI.WebControls.CheckBox
System.Web.UI.WebControls.CompositeControl
System.Web.UI.WebControls.DataListItem
System.Web.UI.WebControls.FileUpload
System.Web.UI.WebControls.HyperLink
System.Web.UI.WebControls.Image
System.Web.UI.WebControls.Label
System.Web.UI.WebControls.LinkButton
System.Web.UI.WebControls.LoginName
System.Web.UI.WebControls.Panel
System.Web.UI.WebControls.SiteMapNodeItem
System.Web.UI.WebControls.Table
System.Web.UI.WebControls.TableCell
System.Web.UI.WebControls.TableRow
System.Web.UI.WebControls.TextBox
System.Web.UI.WebControls.ValidationSummary
1 голос
/ 01 февраля 2010

Вы можете использовать расширение OfType linq:

protected void DisableSQRControls(Control control)
{
 foreach(var webControl in control.Controls.OfType<WebControl>())
 {
  webControl.Enabled = false;
  DisableSQRControls( webControl );
 }
}
0 голосов
/ 01 февраля 2010

Лусеро прав - вот код.

protected void DisableSQRcontrols( Control Page ) 
    { 
        foreach ( Control ctrl in Page.Controls ) 
            if ( ( ctrl is TextBox ) || 
                 ( ctrl is Button  ) || 
                 ( ctrl is ListBox ) ) 
              ((WebControl)ctrl).Enabled = false; 
            else if ( ctrl.Controls.Count > 0 ) 
                DisableSQRcontrols( ctrl ); 
    } 
0 голосов
/ 01 февраля 2010

Все они наследуются от WebControl, откуда берется свойство Enabled. Приведение к WebControl должно делать то, что вам нужно.

...