gpt4 book ai didi

asp.net - 如何以编程方式访问 AspXGridView 的 EditItemTemplate 中的任何 AspxControl

转载 作者:行者123 更新时间:2023-12-01 12:58:31 25 4
gpt4 key购买 nike

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

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

我的问题是:

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

非常感谢。

最佳答案

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

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

检查 documentation关于访问模板中包含的控件

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

但我喜欢使用 Init/Load 事件处理程序的技术。当网格切换到编辑模式时,会引发 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在 DevExpress fourm 上。

关于asp.net - 如何以编程方式访问 AspXGridView 的 EditItemTemplate 中的任何 AspxControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8266282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com