问题描述
我正在使用ASPxGridView,但无法访问 DetailRow 内部的文本框(即,不在主网格视图中的第二个网格视图中)
任何人都可以帮助我
ASPX
@H_502_11@ <Templates> <DetailRow> <dx:ASPxGridView ID="dgCustomers" runat="server" KeyFieldName="CustomerCode" OnBeforePerformDataSelect="dgCustomers_BeforePerformDataSelect" OnDataBinding="dgCustomers_DataBinding" Width="100%" OnRowDeleting="dgCustomers_RowDeleting" OnRowInserting="dgCustomers_RowInserting" OnRowUpdating="dgCustomers_RowUpdating"> <Columns> <dx:GridViewDataColumn FieldName="CustomerCode" VisibleIndex="0"> <EditItemTemplate> <asp:TextBox ID="txtCustCode" runat="server" Width="50px" /> </EditItemTemplate> </dx:GridViewDataColumn> <dx:GridViewDataColumn> <EditItemTemplate> <asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" /> </EditItemTemplate> <dx:GridViewCommandColumn ShowNewButton="true" ShowEditButton="true" ShowDeleteButton="true" VisibleIndex="4"> </dx:GridViewCommandColumn> </Columns>
隐藏代码
我尝试过这样的事情:
@H_502_11@ ASPxGridView detail = dgDepots.FindDetailRowTemplateControl(0,"dgCustomers") as ASPxGridView; if (detail != null) { for (int i = 0; i < detail.VisibleRowCount; i++) { var item = detail.FindDetailRowTemplateControl(0,"txtCustCode"); TextBox textBox = detail.FindRowCellTemplateControl(i,detail.Columns["CustomerCode"] as GridViewDataColumn,"txtCustCode") as TextBox; var anything = textBox.Text; if (CustomerCodeArray.Contains(anything)) { //Something } } }
但是在调试时,我可以看到文本框显示为空
我做错了什么,请帮助我
解决方法
好吧,我这样做。
首先,我有一个扩展方法来访问y单元格模板。
public static object GetDataItemControl(this ASPxGridView _grid,int _visibleIndex,string _fieldName,string _controlID)
{
return _grid.FindRowCellTemplateControl(_visibleIndex,_grid.Columns[_fieldName] as GridViewDataColumn,_controlID);
}
接下来,您应该使用按钮的属性 NamingContainer 来访问位于详细信息行中的gridview,并使用此功能和功能可以访问模板中的文本框。例如:
我使用devexpress引导程序,但相同。
视图,您需要输入一个列名才能访问它。
<dx:BootstrapGridView ID="gv" runat="server" AutoGenerateColumns="False" DataSourceID="DataSource" KeyFieldName="KeyField">
<SettingsDataSecurity AllowEdit="True" /><SettingsBehavior AllowFocusedRow="true" />
<Toolbars>
<dx:BootstrapGridViewToolbar>
<Items>
<dx:BootstrapGridViewToolbarItem Command="Edit" />
<dx:BootstrapGridViewToolbarItem Command="Refresh" />
</Items>
</dx:BootstrapGridViewToolbar>
</Toolbars>
<Columns>
<dx:BootstrapGridViewDataColumn Name="CustomCode">
<DataItemTemplate>
<asp:TextBox ID="txtCustCode" runat="server" Width="50px" />
</DataItemTemplate>
</dx:BootstrapGridViewDataColumn>
<dx:BootstrapGridViewDataColumn>
<DataItemTemplate>
<asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" />
</DataItemTemplate>
</dx:BootstrapGridViewDataColumn>
</Columns>
</dx:BootstrapGridView>
后面的代码是,我们使用NamingContainer属性访问gridview,然后使用扩展方法访问模板中的控件。
protected void btnSearch_Click(object sender,EventArgs e)
{
Button _button = sender as Button;
BootstrapGridView _grid = _button.NamingContainer.NamingContainer.NamingContainer as BootstrapGridView;
TextBox _textBox = _grid.GetDataItemControl(_grid.FocusedRowIndex,"CustomCode","txtCustCode") as TextBox;
String _text = _textBox.Text;
}
如果您有任何疑问,请在注释中使用此代码,并且对我有用。