ASP.NET内联“.FindControl()”在.aspx ListView中?

时间:2012-02-01 10:01:53

标签: asp.net listview gridview findcontrol

在ASP.NET中,我们喜欢在绑定的网格服务器控件(Girdview或ListView)中使用“child”SqlDataSource。

多年来我一直在使用这种FindControl()方法:

C#Codebehind:

protected void gridviewItems_RowDataBound(object sender, GridViewRowEventArgs e)

    {
        Label labelItemId = (Label)e.Row.FindControl("labelItemId");
    }

或者像这样:

  protected void buttonSend_Click(object sender, EventArgs e)
    {
        Label labelItemId = (Label)((Control)sender).NamingContainer.FindControl("labelItemId");
    }

它没有错,但我已经厌倦了,也许在.aspx标记中有办法做到这一点?

类似的东西:

<asp:DropDownList 
     ID="dropdownItems" 
     runat="server" 
     DataSource=<% this.NamingContainer.FindControl("slqdatasourceItems") %> 
     DataTextField="ItemName" 
     DataValueField="ItemId" />

这可能吗?

1 个答案:

答案 0 :(得分:0)

我不确定你的情况如何。你有类似的东西吗?

namespace WebApplication1
{

public class Person
{
    private string name;

    public string Name
    {
        set
        {
            name = value;
        }

        get
        {
            return name;
        }
    }

    public List<Person> GetAll()
    {
        List<Person> persons = new List<Person>();

        Person p1 = new Person();
        p1.Name = "John";

        persons.Add(p1);

        return persons;
    }
}
}

<form id="form1" runat="server">
<div>    

    <asp:GridView runat="server" ID="dataGrid" AutoGenerateColumns="false" DataSourceID="persons">
        <Columns>
            <asp:BoundField HeaderText="Person Name" DataField="Name" />

            <asp:TemplateField>
            <ItemTemplate>
                <asp:DropDownList runat="server" DataTextField="Name" DataSourceID="persons"></asp:DropDownList>
                <asp:ObjectDataSource runat="server" ID="persons" TypeName="WebApplication1.Person" SelectMethod="GetAll"></asp:ObjectDataSource>
            </ItemTemplate>

            </asp:TemplateField>

        </Columns>

    </asp:GridView>

    <asp:ObjectDataSource runat="server" ID="persons" TypeName="WebApplication1.Person" SelectMethod="GetAll"></asp:ObjectDataSource>
</div>
</form>

这是一个带有gridview的Web表单,其中有一个指向Person类的“child”数据源,它的方法是GetAll。根本没有问题。请根据您的情况发布一些完整的标记。

修改

如果你有这样的事情:

<asp:ListView runat="server" ID="lv" DataSourceID="SqlDataSource1">
    <LayoutTemplate><div runat="server" id="itemPlaceholder"></div></LayoutTemplate>
    <ItemTemplate>
        <asp:Label runat="server" Text='<%# Eval("Name") %>'></asp:Label>
        <asp:Button runat="server" CommandName="Edit" Text="Edit" />           
    </ItemTemplate>
    <EditItemTemplate>   
        <asp:Label runat="server" Text='<%# Eval("Name") %>'></asp:Label>        
        <asp:DropDownList ID="DropDownList1" runat="server" DataTextField="Name" DataSourceID="SqlDataSource1"></asp:DropDownList>
        <asp:SqlDataSource id="SqlDataSource1" runat="server" DataSourceMode="DataReader"
          ConnectionString="<%$ ConnectionStrings:SqlConnectionString%>" SelectCommand="SELECT Name FROM Person">
      </asp:SqlDataSource>
    </EditItemTemplate>
    </asp:ListView>

    <asp:SqlDataSource id="SqlDataSource1" runat="server" DataSourceMode="DataReader"
      ConnectionString="<%$ ConnectionStrings:SqlConnectionString%>" SelectCommand="SELECT Name FROM Person">
  </asp:SqlDataSource>

你也不应该有任何问题。我在这里假设您正在从名为“Person”的表中绘制数据。请显示您的特殊情况,因为这当然是一个简单的设置。