2011-11-25 2 views
3

Его очень просто и я чувствую себя как идиот :(Как программно добраться до любого AspxControl внутри EditItemTemplate давал AspXGridView в

Я недавно начал с помощью DevX управления. Его документация и примеры проектов отстой!

Мои проблема заключается в:

у меня есть ASPxGridView на моей странице ASPX:

<dx:ASPxGridView ID="dxdgMyGrid" runat="server" AutoGenerateColumns="False" OnStartRowEditing="DxGridStartRowEditing"> 
<SettingsEditing Mode="PopupEditForm" PopupEditFormHeight="200px" PopupEditFormWidth="500px" 
    EditFormColumnCount="2" PopupEditFormHorizontalAlign="Center" PopupEditFormVerticalAlign="Middle" 
    PopupEditFormModal="true" /> 
<Columns> 
    <dx:GridViewDataTextColumn FieldName="MyField1" VisibleIndex="1"> 
     <EditFormSettings VisibleIndex="0" /> 
     <EditItemTemplate> 
      <dx:ASPxDateEdit ID="dxdateMyField1" runat="server"> 
      </dx:ASPxDateEdit> 
     </EditItemTemplate> 
    </dx:GridViewDataTextColumn> 
    <dx:GridViewDataColumn FieldName="MyField2" VisibleIndex="4"> 
     <EditFormSettings VisibleIndex="1" /> 
     <EditItemTemplate> 
      <dx:ASPxComboBox ID="dxcomboMyField2" runat="server"> 
      </dx:ASPxComboBox> 
     </EditItemTemplate> 
    </dx:GridViewDataColumn> 
</Columns> 

Как я могу достичь dxdateMyField1 или dxcomboMyfield2 в файле ASPX.CS? Я хочу написать:

dxcomboMyField2.DataSource = GetMyData2List(); 
dxcomboMyField2.SelectedItemIndex = 0; 
... etc. 

Большое спасибо.

+1

Это поможет? http://documentation.devexpress.com/#AspNet/CustomDocument3922 –

+0

@DortGen, элементы управления из шаблона недоступны, поскольку шаблон получает экземпляр в какой-то более поздней точке и может быть более одного экземпляра (например, шаблон элемента ретранслятора). Единственный способ - использовать метод FindControl в соответствующем контейнере, когда вы уверены в создании шаблона (например, в этом создании строки редактирования). Независимо от того, проверьте ссылку Wouter de Kort - в которой перечислены используемые события и метод, который будет использоваться для поиска элемента управления. – VinayC

+0

Спасибо, господа, я над этим работаю. – DortGen

ответ

1

Вы можете использовать обработчик события init/load combo box для установки комбо-источника данных. Если это не работает для вас, используйте FindEditRowCellTemplateControl (используйте ссылку в комментариях для дальнейшего объяснения).

3

Нельзя получить доступ непосредственно к элементу управления EditItemTemplate. Вы можете получить доступ к ним в случае HtmlRowCreated как:

if (e.RowType != GridViewRowType.InlineEdit) return; 
    ASPxTextBox txtBox = ASPxGridView1.FindEditRowCellTemplateControl(ASPxGridView1.Columns["Name"] 
      as GridViewDataColumn, "ASPxTextBox1") as ASPxTextBox; 

Проверьте documentation на Доступ к Controls Содержится в шаблонах

можно отливать свойство ASPxLabel.NamingContainer к GridViewEditItemTemplateContainer и получить значение столбца через GridViewEditItemTemplateContainer .Text.

Но мне нравится technique of using the Init/Load event handler. Когда сетка переключается в режим редактирования, возникает событие ASPxLabel.Load. Проверьте эту статью The general technique of using the Init/Load event handler для справки по внедрению.

[ASPX]

<dxe:ASPxTextBox ID="txtName" runat="server" Width="170px" OnInit="txtName_Init"> 

</dxe:ASPxTextBox> 

[C#]

ASPxTextBox txtName;  

protected void txtName_Init(object sender, EventArgs e)  
{  
    txtName = (ASPxTextBox)sender; 

    GridViewEditFormTemplateContainer container = txtName.NamingContainer as GridViewEditFormTemplateContainer; 
// You can remove the if statement, and try to insert a new record. You'll catch an exception, because the DataBinder returns null reference 

    if (!container.Grid.IsNewRowEditing) 

     txtName.Text = DataBinder.Eval(container.DataItem, "CategoryName").ToString();  
} 

Update Event:

protected void grid_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e) 
{ 
    e.NewValues["CategoryName"] = txtName.Text; 
} 

Существует уже вопрос - ASPxGridView - How to find a control inside the EditItemTemplate на DevExpress фото- галерей.

+0

Привет, мистер Ниранджан, я пытаюсь использовать ваш фрагмент. Кроме того, я использую элемент управления AspXDropDown, в соответствии с которым ваш образец кода ASPxTextBox управляется, и он хорошо работает в режиме редактирования.Но когда я нажимаю кнопку «Обновить», работы запутываются: Debugger снова вводит метод OnInit DropDown и в методе RowUpdating (или в моем случае RowInserting), в коллекции NewValues ​​ASPxDataUpdatingEventArgs нет никакого элемента моего элемента управления EditTemplate :(Даже во втором запуске OnInit метод нет информации о собственном DropDown .. Он снова заглушил .. Какая у меня ошибка? – DortGen

+0

Вы видели общую технику init/load page .. есть пример с полем со списком .. проверьте эти примеры .. там example2 .. Если возникает исключение, добавьте выпадающий список в шаблон редактирования и привяжите его данные на мероприятии 'HTMLRowCreated'. –