2011-11-25 71 views
3

內它很簡單,我覺得自己是白癡:(如何以編程方式達成任何AspxControl的AspXGridView的EditItemTemplate中

我剛開始使用DevX控制,它的文檔和示例項目SUCKS!

我問題是:

我有一個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> 

如何在ASPX.CS文件上達到dxdateMyField1或dxcomboMyfield2?我想寫:

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

非常感謝。

+1

這會有幫助嗎? http://documentation.devexpress.com/#AspNet/CustomDocument3922 –

+0

@DortGen,來自模板的控件不容易被訪問,因爲模板在稍後的某個點被實例化,並且可能有多個實例化(例如中繼器的項目模板)。只有在確定模板創建時(例如,在編輯行的創建過程中),才能在相關容器上使用FindControl方法。無論如何,檢查Wouter de Kort鏈接 - 列出要使用的事件和用於查找控件的方法。 – VinayC

+0

謝謝先生們,我正在努力。 – DortGen

回答

1

您可以使用組合框初始化/加載事件處理程序來設置組合數據源。如果這不起作用,請使用FindEditRowCellTemplateControl(在註釋中使用鏈接以獲得進一步解釋)。

3

您無法直接訪問EditItemTemplate控件。您可以在HtmlRowCreated事件訪問它們爲:

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

檢查documentation上訪問控制模板內包含的

它可以通過GridViewEditItemTemplateContainer的ASPxLabel.NamingContainer財產轉換爲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();  
} 

更新事件:

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上的DevExpress4米。

+0

您好Niranjan先生,我正在嘗試使用您的代碼段。除此之外,我使用的是AspXDropDown控件,因此您的示例代碼爲ASPxTextBox控件,在編輯模式時它運行良好。但是,當我點擊更新按鈕的作品令人困惑:調試器再次進入DropDown的OnInit方法和RowUpdating(或在我的情況RowInserting)方法ASPxDataUpdatingEventArgs的NewValues集合沒有任何一塊我的EditTemplate控件:(即使在第二次運行的OnInit方法有沒有關於DropDown自己的信息..它再次無效..我的錯誤是什麼? – DortGen

+0

你見過普通技術init/load page ..有組合框的例子..檢查那些例子..有example2 ..如果引發異常,則在編輯模板中添加dropdownlist,並在'HTMLRowCreated'事件中綁定其數據。 –

相關問題