ASP.NET встроенный ".FindControl ()" в .aspx ListView? - PullRequest
0 голосов
/ 01 февраля 2012

В ASP.NET нам нравится использовать «дочерний» SqlDataSource внутри серверного элемента управления связанной сетки (Girdview или ListView).

Я использовал этот 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 голосов
/ 01 февраля 2012

Я не уверен, какова ваша ситуация.У вас есть что-то вроде этого?

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, которая имеет «дочерний» источник данных, указывающий на класс Person и его метод 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>

у вас не должно быть никакихпроблемы тоже.Я предполагаю, что вы рисуете данные из таблицы с именем «Персона».Пожалуйста, покажите ваш особый случай, поскольку это, конечно, простая настройка.

...