【问题标题】:Finding controls within Devexpress ASPxGridView在 Devexpress ASPxGridView 中查找控件
【发布时间】:2012-08-24 05:39:38
【问题描述】:

我有一个代码,其中包含一个 ASPxGridView 和一个 ASPxCheckBox 和标签,如下所示:


    <dx:ASPxGridView ID="gvTableSearchHomes" runat="server" DataSourceID="XmlHomes" Width="341px"
CssClass="tableViewSearchGrid" ClientInstanceName="gvTableSearchHomes"
AutoGenerateColumns="False" EnableRowsCache="false" KeyFieldName="ID">
<%--<Columns>--%>
    <%-- DXCOMMENT: Within ASPxGridView, add a column whose values will participate in filtering --%>
    <%--<dx:GridViewDataTextColumn FieldName="Address">
        <PropertiesTextEdit NullText="Search your home"></PropertiesTextEdit>
        <Settings AllowAutoFilterTextInputTimer="True" AutoFilterCondition="Contains" />
    </dx:GridViewDataTextColumn>
</Columns>--%>
    <Templates>
     <%--DXCOMMENT: Configure the grid's DataRow template in accordance with data source fields --%>
    <DataRow>
        <div class="gvItem">
            <dx:ASPxCheckBox ID="ChkBookList" runat="server"></dx:ASPxCheckBox>
            <dx:ASPxLabel ID="Address" runat="server" CssClass="address" Text='<%# Utils.ExtractFirstRow(Eval("Address")) %>' />
            <%--<p><dx:ASPxLabel ID="Address2" runat="server" CssClass="address2" Text='<%# Utils.ExtractSecondRow(Eval("Address")) %>' /></p>
            <p><dx:ASPxLabel ID="Price" runat="server" CssClass="price" Text='<%# Utils.GetPrice(Eval("Price")) %>' /></p>--%>
        </div>
    </DataRow>
</Templates>
<SettingsPager Visible="false" PageSize="1000" />
<Settings ShowVerticalScrollBar="True" ShowFilterRow="true" ShowColumnHeaders="false"/>
<SettingsBehavior AutoExpandAllGroups="true" AllowSelectSingleRowOnly="true" AllowSelectByRowClick="true"/>
<ClientSideEvents 
    Init="function(){ hr.TableViewLandscape_Adjust(); }" 
    EndCallback="function(){ hr.TableViewLandscape_Adjust(); }"
    SelectionChanged="OnGvTableSearchHomesSelectedChanged" />
<Styles>
    <SelectedRow ForeColor="White"></SelectedRow>
</Styles>


我无法通过 C# 代码访问这些控制。有谁能够帮我。请

【问题讨论】:

  • 你应该在发布之前清理你的代码。删除与您的问题无关的 cmets 和代码。
  • 更新您尝试访问控件的代码隐藏代码..您尝试访问控件的网格视图事件。
  • 为什么不联系 DevExpress 人员咨询?
  • @Mikhail DevExpress 支持在大多数情况下是无用的。你得到的只是一个链接到他们与实际问题无关的琐碎示例,

标签: c# devexpress


【解决方案1】:

检查documentation methods 以在不同的gridview 模板中查找控件。 例如ASPxGridView.FindRowTemplateControl Method

来源:http://developmentsolutionsjunction.blogspot.in/2011/11/find-controls-in-dataitemtemplate-of.html

//标记

    <dx:ASPxGridView ID="grvTest" AutoGenerateColumns="False" runat="server" DataSourceID="SqlDataSource1"
          OnHtmlRowPrepared="grvTest_HtmlRowPrepared" OnHtmlRowCreated="grvTest_HtmlRowCreated">
          <Columns>
              <dx:GridViewDataTextColumn Caption="RowID" Name="colRowID" VisibleIndex="0" Width="20px">
                  <DataItemTemplate>
                       <dx:ASPxLabel ID="lblRowID" runat="server" Text='Label'>
                      </dx:ASPxLabel>
                 </DataItemTemplate>
</dx:GridViewDataTextColumn>

//在代码隐藏中访问模板控件

protected void grvTest_HtmlRowCreated(object sender, ASPxGridViewTableRowEventArgs e)
        {
            if (e.RowType != GridViewRowType.Data) return;

            ASPxLabel label = grvTest.FindRowCellTemplateControl(e.VisibleIndex, null,
            "lblRowID") as ASPxLabel;
            label.Text = (e.VisibleIndex + 1).ToString();
        }

示例代码:

ASPxGridView grid = (ASPxGridView)sender;

ASPxPageControl myPages = grid.FindEditFormTemplateControl("CityEditTabs") 
                                                              as ASPxPageControl;

参考资料:
How can I write events for the controls used in my Grid templates
Some GridView code snippets to understand gridview concepts

标识 VisibleIndex 或 RowHandle 以获取您在标记中创建的特定模板中的控件。

希望以上示例能帮助您解决问题。

【讨论】:

  • Niranjan,你确定这仍然有效吗?您参考的知识库文章是为旧的 DevEx 网格库编写的。
  • @Filip:为什么不这些东西不会突然改变,即使是版本 8 线程也会让你接近解决方案。我已经提到了升级后的 gridview 参考,这将有助于在各种 gridview 服务器端事件中获得控制权。
  • 我不确定我是否理解你。您在示例中使用了 ASPxGrid.Items,并且当前的 DevEx 组件不包括 ASPxGrid。此外,ASPxGridView 没有 Items 集合属性。
  • 好吧,我已经清理了旧版本的网格控件。在 gridview 事件或 repositoryitem 自己的事件中可以访问新版本的网格控件。
【解决方案2】:

谢谢我解决了我的问题。我把这个

Protected Sub GvEncuesta_HtmlRowCreated(sender As Object, e As ASPxGridViewTableRowEventArgs)
    If (e.RowType <> GridViewRowType.Data) Then Return

    Try
        Dim cmbRespuesas As ASPxComboBox = GvEncuesta.FindRowCellTemplateControl(e.VisibleIndex, Nothing, "ASPxCmbRespuestas")

        cmbRespuesas.IncrementalFilteringMode = IncrementalFilteringMode.Contains
        cmbRespuesas.Visible = True
        cmbRespuesas.DataSource = wcfCap.RetrieveRespuestaEncuestaxEstado(1)
        cmbRespuesas.ValueField = "Cod_Respuesta"
        cmbRespuesas.TextField = "Nombre_Respuesta"
        cmbRespuesas.DataBindItems()
    Catch ex As Exception
    End Try
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多