2010-07-28 64 views
0

在asp.net中有时一个webcontrol需要引用另一个webcontrol,比如gridview需要它绑定到的数据源对象的id。Webcontrol作为另一个webcontrol的属性

我有我的webcontrol属性是一个字符串(我想参考的webcontrol的id)。如何根据此ID访问实际的Web控件?

回答

1
+0

FindControl只在任何给定的容器中看起来。但是,如果这是唯一可用于这种情况的工具,那么解决方案是构建一个遍历页面结构并返回与提供的id相匹配的控件的递归方法。 – SynBiotik 2010-07-28 14:39:29

+0

嗯......但是不是Page.FindControl()搜索整个页面? – cRichter 2010-07-29 09:07:52

+0

它不应该: “FindControl方法可用于访问在设计时ID不可用的控件。该方法仅搜索页面的即时或顶级容器;它不会递归搜索命名页面中包含的容器要访问下级命名容器中的控件,请调用该容器的FindControl方法。“ - http://msdn.microsoft.com/en-us/library/31hxzsdw.aspx – SynBiotik 2010-07-29 13:15:52

0

下面是结合到一个ObjectDataSource一个GridView的样品,与所述的ObjectDataSource结合为一个参数一个DropDownList。这应该让你开始。

<asp:GridView ID="GridView1" runat="server" 
    AutoGenerateColumns="False" 
    DataSourceID="CustomerObjectDataSource" 
    DataKeyNames="CustomerID" 
    AllowPaging="True" 
    AllowSorting="True" AutoGenerateDeleteButton="True" 
    AutoGenerateEditButton="True" AutoGenerateSelectButton="True" 
    onrowdeleted="GridView1_RowDeleted" onrowupdated="GridView1_RowUpdated"> 
    <Columns> 
     ... 
    </Columns> 
</asp:GridView> 

<asp:ObjectDataSource ID="CustomerObjectDataSource" runat="server" 
    EnablePaging="True" 
    MaximumRowsParameterName="totalRows" 
    StartRowIndexParameterName="firstRow" 
    TypeName="Northwind.Business.CustomerSource" 
    DataObjectTypeName="Northwind.Business.CustomerDTO" 
    SelectMethod="Load" 
    UpdateMethod="Save" 
    InsertMethod="Insert" 
    DeleteMethod="Delete" 
    SelectCountMethod="CustomerCount" 
    SortParameterName="sortExpression"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="ddlRegion" Name="region" 
      PropertyName="SelectedValue" /> 
    </SelectParameters> 
</asp:ObjectDataSource>  
+0

仍然存在的问题是:gridview是否通过使用FindControl方法递归遍历页面来定位ObjectDataSource? – SynBiotik 2010-07-28 14:40:17

+0

@SynBiotik,no。 GridView标记的DataSourceID字段通过数据源的ID标识ObjectDataSource。绑定是显式的(在上面的示例代码中,“CustomerObjectDataSource”)。 – 2010-07-28 19:52:57

+0

IHere是DataSourceId代码: 公共虚拟字符串DataSourceID { 得到 {obj2 = this.ViewState [“DataSourceID”]; if(obj2!= null) { return(string)obj2; } return string.Empty; } 设置 { 如果 { this._requiresBindToNull =真(string.IsNullOrEmpty(值)&& string.IsNullOrEmpty(this.DataSourceID)!); } this.ViewState [“DataSourceID”] = value; this.OnDataPropertyChanged(); } } gridview如何将字符串绑定到实际的对象? – SynBiotik 2010-07-29 10:55:16