如何以编程的AspXGridView的EditItemTemplate中内达成任何AspxControl [英] How to programmatically reach any AspxControl inside an AspXGridView's EditItemTemplate
问题描述
它很简单,我觉得自己是白痴:(
Its very simple and i feel myself as an idiot :(
我新开工使用DevX控制。它的文档和示例项目SUCKS!
I newly started to using DevX Controls. Its documentation and sample projects are SUCKS!
我的问题是:
我有一个ASPxGridView我的aspx页面上:
I have an ASPxGridView on my aspx page:
<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文件?我想写:
How can i reach dxdateMyField1 or dxcomboMyfield2 on ASPX.CS file? I want to write:
dxcomboMyField2.DataSource = GetMyData2List();
dxcomboMyField2.SelectedItemIndex = 0;
... etc.
非常感谢。
推荐答案
您不能直接访问的EditItemTemplate控制。您可以在HtmlRowCreated事件作为访问它们:
You cannot access the EditItemTemplate Control Directly. You can access them at the HtmlRowCreated event as:
if (e.RowType != GridViewRowType.InlineEdit) return;
ASPxTextBox txtBox = ASPxGridView1.FindEditRowCellTemplateControl(ASPxGridView1.Columns["Name"]
as GridViewDataColumn, "ASPxTextBox1") as ASPxTextBox;
检查访问模板内包含的控件的文档
有可能通过GridViewEditItemTemplateContainer.Text属性ASPxLabel.NamingContainer财产转换为GridViewEditItemTemplateContainer并得到一个列的值。
It is possible to cast the ASPxLabel.NamingContainer property to GridViewEditItemTemplateContainer and get a column value via the GridViewEditItemTemplateContainer.Text property.
但我喜欢使用init / Load事件处理程序的的技术。
当电网切换到编辑模式下,ASPxLabel.Load事件引发。检查这篇文章使用init / Load事件处理程序的通用技术实施帮助。
But I like the technique of using the Init/Load event handler.
When the grid switches to edit mode, the ASPxLabel.Load event is raised. Check this article The general technique of using the Init/Load event handler for implementation help.
[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 - 如何找到一个在EditItemTemplate中内部人控制的上DevEx preSS4米。
There is already an question - ASPxGridView - How to find a control inside the EditItemTemplate on DevExpress fourm .
这篇关于如何以编程的AspXGridView的EditItemTemplate中内达成任何AspxControl的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!