Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Задача для самого сильного про ListView / 21 сообщений из 21, страница 1 из 1
15.08.2009, 20:15
    #36145974
albert t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
Трудолюбивый Незнайка в процессе освоения симпатичного контрола ListView сталкнулся с неожиданной трудностью.

Как известно, этот контрол имеет возможность отображать при выборе строки расширенную информацию. Например вот так

Красиво, не правда ли?

Естественным желанием стало положить в SelectedItemTemplate какой нибудь контрол, который бы не отображался в ItemTemplate

Например вот так
Это ItemTemplate
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<ItemTemplate>
                <tr style="background-color:#DCDCDC;color: #000000;">
                    <td>
                        <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' />
                    </td>
                    <td>
                        <asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' />
                    </td>
                    <td>
                        <asp:Button ID="SelButt" runat="server" Text='<%# Eval("Name") %>' CommandName="Select" />
                    </td>
                </tr>
            </ItemTemplate>
А это SelectedItemTemplate
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<SelectedItemTemplate>
                <tr style="background-color:#008A8C;font-weight: bold;color: #FFFFFF;">
                    <td>
                        <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' />
                    </td>
                    <td>
                        <asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Label ID="Label1" runat="server" Text="LabelMabel"></asp:Label>
                    </td>
                    <td>
                        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
                            <Columns>
                                <asp:BoundField DataField="Name" HeaderText="Name3" />
                            </Columns>
                        </asp:GridView>
                    </td>
                </tr>
            </SelectedItemTemplate>

Засучив рукава и провозившись целые сутки я так и не смог применить метод FindControl для того чтобы достучаться до любого контрола расположеного в SelectedItemTemplate

Контролы в ItemTemplate доступны и приветливы.

В общем полазив по сети и не обнаружив решения решил писать сюда.

С надеждой и нетерпением.
...
Рейтинг: 0 / 0
15.08.2009, 20:27
    #36145982
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
...
Рейтинг: 0 / 0
15.08.2009, 20:38
    #36145995
albert t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
bured,

Код: plaintext
1.
2.
3.
4.
5.
protected void ListView1_SelectedIndexChanging(object sender, ListViewSelectEventArgs e)
    {
        ListViewItem currentItem = (ListViewItem)ListView1.Items[e.NewSelectedIndex];
        Label currentLabel = (Label)currentItem.FindControl("Label1");
        Label2.Text += currentLabel.Text;
    }

Такой код возвращает currentLabel как null
...
Рейтинг: 0 / 0
15.08.2009, 20:44
    #36146002
albert t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
bured,

Код: plaintext
1.
2.
3.
4.
protected void ListView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Label currentLabel = (Label)ListView1.Items[ListView1.SelectedIndex].FindControl("Label1");
        Label2.Text += currentLabel.Text;
}

И такой код возвращает currentLabel как null

Может быть это поможет знатокам помочь мне.

Интуиция... гусеницу мне за шиворот
...
Рейтинг: 0 / 0
15.08.2009, 20:46
    #36146003
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
ага. А сама листвьюха заполнена?
...
Рейтинг: 0 / 0
15.08.2009, 20:52
    #36146006
albert t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
bured,

Разумеется. Я же говорю, если обращаться к контролам которые в ItemTemplate, то всё прекрасно и радужно.
...
Рейтинг: 0 / 0
15.08.2009, 21:20
    #36146023
Centraloff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
Советую посмотреть в сторону ajax и контрола Accordion именно он и решает задачу за 10 мин. которую вы пытаетесь решить.
http://www.asp.net/AJAX/AjaxControlToolkit/Samples/Accordion/Accordion.aspx
...
Рейтинг: 0 / 0
16.08.2009, 04:01
    #36146165
Василий Викторович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
albert t, Динамическое создание TemplateItem и не нужно городить огород с AJAX
...
Рейтинг: 0 / 0
16.08.2009, 16:31
    #36146424
albert t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
Спасибо за советы, Друзья.

Правда они больше напоминают обходные манёвры чем лихую кавалеристскую атаку.

Пока я не придумал ничего лучше чем поместить все необходимые контролы в ItemTemplate и погасить их там.
...
Рейтинг: 0 / 0
16.08.2009, 17:29
    #36146456
Жмурик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
Ларчик открывается проще: FindControl не ищет контролы без name="тому же, чтол и ID".
Только, чур, не спрашивайте, почему.

Ноут: Созданные невручную имЕют аттрибут name.
...
Рейтинг: 0 / 0
16.08.2009, 21:29
    #36146608
Zorina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
почему не буду спрашивать, спрошу, откуда такие сведения..? выкладывайте примеры:)______________________________________
http://asp.net/learn/data-access/
Ищи там где потерял, а не там где светло.
мы с вами когда-то где-то уже встречались да, я была уже когда-то где-то.
...
Рейтинг: 0 / 0
16.08.2009, 21:32
    #36146613
Zorina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
 что-то вы где-то не там или не так искали....<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ListView.aspx.cs" Inherits="ListView_" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"/>
<body>
<form id="form1" runat="server">
<asp:ListView runat="server" ID="ListView1"
onselectedindexchanged="ListView1_SelectedIndexChanged"
onselectedindexchanging="ListView1_SelectedIndexChanging">
<LayoutTemplate>
<table>
<tr runat="server" id="itemPlaceholder" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr style="background-color: #DCDCDC; color: #000000;">
<td>
<asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' />
</td>
<td>
<asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' />
<asp:Button ID="SelButt" runat="server" Text='<%# Eval("Name") %>' CommandName="Select" /></td>
</tr>
</ItemTemplate>
<SelectedItemTemplate>
<tr style="background-color: #008A8C; font-weight: bold; color: #FFFFFF;">
<td>
<asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>' />
</td>
<td>
<asp:Label ID="NameLabel" runat="server" Text='<%# Eval("Name") %>' />
</td>
</tr>
</SelectedItemTemplate>
</asp:ListView>
</form>
</body>
</html>


using System;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ListView_ : System.Web.UI.Page
{

void BindListView1()
{
ListView1.DataSource = TestDataSource.DT;
ListView1.DataBind();
}

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack) BindListView1();
}

protected void ListView1_SelectedIndexChanging(object sender, ListViewSelectEventArgs e)
{
ListView1.SelectedIndex = e.NewSelectedIndex;
BindListView1();
}

protected void ListView1_SelectedIndexChanged(object sender, EventArgs e)
{
Label currentLabel = ListView1.Items[ListView1.SelectedIndex].FindControl("idLabel") as Label;
currentLabel.Text = "Selected: " + currentLabel.Text;
}
}

______________________________________
http://asp.net/learn/data-access/
Ищи там где потерял, а не там где светло.
мы с вами когда-то где-то уже встречались да, я была уже когда-то где-то.
...
Рейтинг: 0 / 0
21.08.2009, 11:49
    #36156402
albert t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
Zorina,

Вопрос был о том что без упоминания в ItemTamplate FindControl не ищет контролы в других шаблонах. Если вы дублируете его в ItemTamplate тогда всё в порядке, но размер кода увеличивается в два раза. А это некрасиво.
...
Рейтинг: 0 / 0
21.08.2009, 13:56
    #36156835
KVVK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
albert tbured,

Код: plaintext
1.
2.
3.
4.
5.
protected void ListView1_SelectedIndexChanging(object sender, ListViewSelectEventArgs e)
    {
        ListViewItem currentItem = (ListViewItem)ListView1.Items[e.NewSelectedIndex];
        Label currentLabel = (Label)currentItem.FindControl("Label1");
        Label2.Text += currentLabel.Text;
    }

Такой код возвращает currentLabel как null

Для DataList в этом случае нужно выполнить DataBind()

protected void DataList1_SelectedIndexChanged(object sender, EventArgs e)
{
int curr = DataList1.SelectedIndex;
DataList1.DataBind();
Label ll = (Label)DataList1.Items[curr].FindControl("Label1");
}

а про ListView не знаю
...
Рейтинг: 0 / 0
21.08.2009, 15:31
    #36157184
Zorina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
незнайка-сказочник :)
поменяйте в моем примере в селектед темплейт лейбел на текстбокс с любым другим id и получите через findcontrol текстбокс, которого в ItemTemplate нету но есть в SelectedItemTemplate. ______________________________________
http://asp.net/learn/data-access/
Ищи там где потерял, а не там где светло.
мы с вами когда-то где-то уже встречались да, я была уже когда-то где-то.
...
Рейтинг: 0 / 0
22.08.2009, 12:49
    #36158070
albert t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
Zorina,

А GridView поменять на <hr />?
...
Рейтинг: 0 / 0
23.08.2009, 16:52
    #36158734
albert t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
Zorina,

Спасибо. Работает. Может быть вы будете так любезны, что объясните в чём дело? Где копать, так сказать?
...
Рейтинг: 0 / 0
23.08.2009, 18:52
    #36158829
albert t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
Zorina,

К сожалению ваш ход позволяет только считывать данные, но решить задачу типа отображения "один-ко-многим" в SelectedItemTamplate не позволяет.
Может быть ещё варианты?
...
Рейтинг: 0 / 0
23.08.2009, 18:53
    #36158831
albert t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
KVVK,

Да. В ListView тоже такой же манёвр работает. Но только на чтение свойств контрола. Или я не до конца понимаю?
...
Рейтинг: 0 / 0
23.08.2009, 19:26
    #36158888
albert t
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
Сверхзадача выглядит просто - Необходимо отобразить подчинённый, редактируемый GridView при выборе строки ListView.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
18.06.2013, 11:09
    #38301164
BasilSad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для самого сильного про ListView
Тоже есть проблема с SelectedItemTemplate. В SelectedItemTemplate лежит GridView, со своими процедурами манипуляции данных. не могу найти метод отображения GridView по выбору элемента в ListView SelectedItemTemplate
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Задача для самого сильного про ListView / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]