3

它非常简单,我觉得自己是个白痴:(

我刚开始使用 DevX Controls。它的文档和示例项目很糟糕!

我的问题是:

我的 aspx 页面上有一个 ASPxGridView:

<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.

非常感谢。

4

2 回答 2

3

您不能直接访问 EditItemTemplate 控件。您可以在 HtmlRowCreated 事件中访问它们,如下所示:

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

查看有关访问模板中包含的控件的文档

可以将 ASPxLabel.NamingContainer 属性转换为 GridViewEditItemTemplateContainer 并通过 GridViewEditItemTemplateContainer.Text 属性获取列值。

但我喜欢technique of using the Init/Load event handler.当网格切换到编辑模式时,会引发 ASPxLabel.Load 事件。查看这篇文章使用 Init/Load 事件处理程序的一般技术以获得实现帮助。

[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 on DevExpressfourm 。

于 2011-11-25T09:11:14.287 回答
1

您可以使用组合框初始化/加载事件处理程序来设置组合数据源。如果这对您不起作用,请使用 FindEditRowCellTemplateControl(使用评论中的链接进行进一步解释)。

于 2011-11-25T08:42:34.500 回答