DataGrid и DropDownList
От: tamtam  
Дата: 25.07.02 18:12
Оценка: 3 (1)
В режиме редактирования одно из полей грида представляется в виде выпадающего списка возможных значений.
Все работает, но есть проблема. Как установить текущее значение в списке соответствующее значению поля.
Целый день ищу, ничего не получается.
На всякий случай ниже фрагмент этого поля:

<asp:TemplateColumn HeaderText="статья расходов">
<ItemTemplate>
<asp:label id="BudgetType" runat="server">
<%# DataBinder.Eval(Container.DataItem, "budget_type")%>
</asp:label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server"
ID="BudgetTypeList"
DataSource="<%# BudgetTypeList()%>"
DataTextField="descript"
DataValueField="budget_type_id"
>
</asp:DropDownList>
</EditItemTemplate>
В DropDownList нужно выбрать строку соответствующую label
Re: DataGrid и DropDownList
От: kocta Россия  
Дата: 26.07.02 05:30
Оценка: 6 (2)
Здравствуйте tamtam, Вы писали:

T>В режиме редактирования одно из полей грида представляется в виде выпадающего списка возможных значений.

T>Все работает, но есть проблема. Как установить текущее значение в списке соответствующее значению поля.
T>Целый день ищу, ничего не получается.
T>На всякий случай ниже фрагмент этого поля:

T> <asp:TemplateColumn HeaderText="статья расходов">

T> <ItemTemplate>
T> <asp:label id="BudgetType" runat="server">
T> <%# DataBinder.Eval(Container.DataItem, "budget_type")%>
T> </asp:label>
T> </ItemTemplate>
T> <EditItemTemplate>
T> <asp:DropDownList runat="server"
T> ID="BudgetTypeList"
T> DataSource="<%# BudgetTypeList()%>"
T> DataTextField="descript"
T> DataValueField="budget_type_id"
T> >
T> </asp:DropDownList>
T> </EditItemTemplate>
T> В DropDownList нужно выбрать строку соответствующую label


Привожу пример своего кода.
Нужно у грида обрабатывать событие ItemDataBound.
В моем случае DropDownList называется list.
Думаю все ясно.
private void Grid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
DataRowView Dr = (DataRowView)e.Item.DataItem;
switch (e.Item.ItemType)
{
case ListItemType.EditItem:
{
if (((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString())!=null)
{
((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString()).Selected=true;
}
break;
}

}
}
}
Re[2]: DataGrid и DropDownList
От: tamtam  
Дата: 26.07.02 08:55
Оценка:
Здравствуйте kocta, Вы писали:


K>Привожу пример своего кода.

K>Нужно у грида обрабатывать событие ItemDataBound.
K>В моем случае DropDownList называется list.
K>Думаю все ясно.
K> private void Grid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
K> {
K> DataRowView Dr = (DataRowView)e.Item.DataItem;
K> switch (e.Item.ItemType)
K> {
K> case ListItemType.EditItem:
K> {
K> if (((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString())!=null)
K> {
K> ((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString()).Selected=true;
K> }
K> break;
K> }

K> }

K> }
K> }

спасибо, работает
только у меня не преобразование
DataRowView Dr = (DataRowView)e.Item.DataItem;
дает ошибку, пришлось сделать вот так
System.Data.Common.DbDataRecord Dr = (System.Data.Common.DbDataRecord)e.Item.DataItem;

интересно с чем это может быть связано?
не порекомендуете, что кроме MSDN можно почитать по теме?
Re[2]: DataGrid и DropDownList
От: TK Лес кывт.рф
Дата: 27.07.02 10:07
Оценка: 3 (1)
Здравствуйте kocta, Вы писали:

K>Здравствуйте tamtam, Вы писали:


T>>В режиме редактирования одно из полей грида представляется в виде выпадающего списка возможных значений.

T>>Все работает, но есть проблема. Как установить текущее значение в списке соответствующее значению поля.
T>>Целый день ищу, ничего не получается.
T>>На всякий случай ниже фрагмент этого поля:

K>Привожу пример своего кода.

K>Нужно у грида обрабатывать событие ItemDataBound.
K>В моем случае DropDownList называется list.
K>Думаю все ясно.
K> private void Grid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
K> {
K> DataRowView Dr = (DataRowView)e.Item.DataItem;
K> switch (e.Item.ItemType)
K> {
K> case ListItemType.EditItem:
K> {
K> if (((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString())!=null)
K> {
K> ((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString()).Selected=true;
K> }
K> break;
K> }

K> }

K> }
K> }

Можно еще написать функцию, которая вернет для Dr["NAME"] его индекс и установить для DropDownList SelectedItem="<%#Func(Dr["NAME"])%>". Тогда ItemDataBound перекрывать не придется
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: DataGrid и DropDownList
От: kocta Россия  
Дата: 29.07.02 05:04
Оценка:
Здравствуйте TK, Вы писали:

TK>Здравствуйте kocta, Вы писали:


K>>Здравствуйте tamtam, Вы писали:


T>>>В режиме редактирования одно из полей грида представляется в виде выпадающего списка возможных значений.

T>>>Все работает, но есть проблема. Как установить текущее значение в списке соответствующее значению поля.
T>>>Целый день ищу, ничего не получается.
T>>>На всякий случай ниже фрагмент этого поля:

K>>Привожу пример своего кода.

K>>Нужно у грида обрабатывать событие ItemDataBound.
K>>В моем случае DropDownList называется list.
K>>Думаю все ясно.
K>> private void Grid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
K>> {
K>> DataRowView Dr = (DataRowView)e.Item.DataItem;
K>> switch (e.Item.ItemType)
K>> {
K>> case ListItemType.EditItem:
K>> {
K>> if (((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString())!=null)
K>> {
K>> ((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString()).Selected=true;
K>> }
K>> break;
K>> }

K>> }

K>> }
K>> }

TK>Можно еще написать функцию, которая вернет для Dr["NAME"] его индекс и установить для DropDownList SelectedItem="<%#Func(Dr["NAME"])%>". Тогда ItemDataBound перекрывать не придется


Пробовал писать и так !
Но во многоих случаях это вызывает ряд проблем (ели кому интересно могу описать).
Если использовать такую схему то приходится в конце концов прибегать к хеш таблицам а это не изящьно
Re[3]: DataGrid и DropDownList
От: kocta Россия  
Дата: 29.07.02 05:22
Оценка:
Здравствуйте tamtam, Вы писали:

T>Здравствуйте kocta, Вы писали:



K>>Привожу пример своего кода.

K>>Нужно у грида обрабатывать событие ItemDataBound.
K>>В моем случае DropDownList называется list.
K>>Думаю все ясно.
K>> private void Grid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
K>> {
K>> DataRowView Dr = (DataRowView)e.Item.DataItem;
K>> switch (e.Item.ItemType)
K>> {
K>> case ListItemType.EditItem:
K>> {
K>> if (((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString())!=null)
K>> {
K>> ((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString()).Selected=true;
K>> }
K>> break;
K>> }

K>> }

K>> }
K>> }

T>спасибо, работает

T>только у меня не преобразование
T>DataRowView Dr = (DataRowView)e.Item.DataItem;
T>дает ошибку, пришлось сделать вот так
T>System.Data.Common.DbDataRecord Dr = (System.Data.Common.DbDataRecord)e.Item.DataItem;

T>интересно с чем это может быть связано?

А какие reference ты подключаешь?

T>не порекомендуете, что кроме MSDN можно почитать по теме?

MSDN хорош!!!!!!! Там есть все ! Но ничего невозможно найти
Могу посоветовать:
http://www.aspnetmania.com/
http://www.c-sharpcorner.com/

на них много ссылок на другие сайты.
Re[4]: DataGrid и DropDownList
От: TK Лес кывт.рф
Дата: 29.07.02 05:56
Оценка:
Здравствуйте kocta, Вы писали:

K>Здравствуйте TK, Вы писали:


TK>>Здравствуйте kocta, Вы писали:


K>>>Здравствуйте tamtam, Вы писали:


T>>>>В режиме редактирования одно из полей грида представляется в виде выпадающего списка возможных значений.

T>>>>Все работает, но есть проблема. Как установить текущее значение в списке соответствующее значению поля.
T>>>>Целый день ищу, ничего не получается.
T>>>>На всякий случай ниже фрагмент этого поля:

K>>>Привожу пример своего кода.

K>>>Нужно у грида обрабатывать событие ItemDataBound.
K>>>В моем случае DropDownList называется list.
K>>>Думаю все ясно.
K>>> private void Grid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
K>>> {
K>>> DataRowView Dr = (DataRowView)e.Item.DataItem;
K>>> switch (e.Item.ItemType)
K>>> {
K>>> case ListItemType.EditItem:
K>>> {
K>>> if (((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString())!=null)
K>>> {
K>>> ((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString()).Selected=true;
K>>> }
K>>> break;
K>>> }

K>>> }

K>>> }
K>>> }

TK>>Можно еще написать функцию, которая вернет для Dr["NAME"] его индекс и установить для DropDownList SelectedItem="<%#Func(Dr["NAME"])%>". Тогда ItemDataBound перекрывать не придется


K>Пробовал писать и так !

K>Но во многоих случаях это вызывает ряд проблем (ели кому интересно могу описать).
И каких?

K>Если использовать такую схему то приходится в конце концов прибегать к хеш таблицам а это не изящьно

K>
Можно использовать кэширующую сборку
Да и потом, в гриде, что много записей и они сразу все редатируются?
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[5]: DataGrid и DropDownList
От: kocta Россия  
Дата: 29.07.02 07:10
Оценка:
Здравствуйте TK, Вы писали:

TK>Здравствуйте kocta, Вы писали:


K>>Здравствуйте TK, Вы писали:


TK>>>Здравствуйте kocta, Вы писали:


K>>>>Здравствуйте tamtam, Вы писали:


T>>>>>В режиме редактирования одно из полей грида представляется в виде выпадающего списка возможных значений.

T>>>>>Все работает, но есть проблема. Как установить текущее значение в списке соответствующее значению поля.
T>>>>>Целый день ищу, ничего не получается.
T>>>>>На всякий случай ниже фрагмент этого поля:

K>>>>Привожу пример своего кода.

K>>>>Нужно у грида обрабатывать событие ItemDataBound.
K>>>>В моем случае DropDownList называется list.
K>>>>Думаю все ясно.
K>>>> private void Grid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
K>>>> {
K>>>> DataRowView Dr = (DataRowView)e.Item.DataItem;
K>>>> switch (e.Item.ItemType)
K>>>> {
K>>>> case ListItemType.EditItem:
K>>>> {
K>>>> if (((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString())!=null)
K>>>> {
K>>>> ((DropDownList)e.Item.FindControl("list")).Items.FindByText(Dr["NAME"].ToString()).Selected=true;
K>>>> }
K>>>> break;
K>>>> }

K>>>> }

K>>>> }
K>>>> }

TK>>>Можно еще написать функцию, которая вернет для Dr["NAME"] его индекс и установить для DropDownList SelectedItem="<%#Func(Dr["NAME"])%>". Тогда ItemDataBound перекрывать не придется


K>>Пробовал писать и так !

K>>Но во многоих случаях это вызывает ряд проблем (ели кому интересно могу описать).
TK>И каких?

Предположим такая ситуация:
Есть словарь данных (из которого заполняется DataList)вида:

MasterKey Некое поле
1 значение 1
2 значение 2
........................
N значение N

Мы заполняем DataList т.е.
text = значение1 , Value = 1 (MasterKey)
............................
text = значение N , Value = N (MasterKey)

Если последовательность MasterKey =1,2,3,4,5,6....N ненарушается то все нормально все работает

SelectedItem = SelecttedItem.Value

Но если пользователь изменил последовательность MasterKey = 1,2,5,6,7,8 (т.е редактировал словарь)
то тут это уже не работает.

SelectedItem != SelecttedItem.Value

Я сталкивался с такими проблемами.


K>>Если использовать такую схему то приходится в конце концов прибегать к хеш таблицам а это не изящьно :-)

K>>
TK>Можно использовать кэширующую сборку :-)
TK>Да и потом, в гриде, что много записей и они сразу все редатируются? :)
Re[6]: DataGrid и DropDownList
От: TK Лес кывт.рф
Дата: 29.07.02 07:31
Оценка:
Здравствуйте kocta, Вы писали:


K>Предположим такая ситуация:

K>Есть словарь данных (из которого заполняется DataList)вида:

K>MasterKey Некое поле

K> 1 значение 1
K> 2 значение 2
K>........................
K> N значение N

K>Мы заполняем DataList т.е.

K> text = значение1 , Value = 1 (MasterKey)
K> ............................
K> text = значение N , Value = N (MasterKey)

K>Если последовательность MasterKey =1,2,3,4,5,6....N ненарушается то все нормально все работает


K>SelectedItem = SelecttedItem.Value


K>Но если пользователь изменил последовательность MasterKey = 1,2,5,6,7,8 (т.е редактировал словарь)

K>то тут это уже не работает.
K>
K>SelectedItem != SelecttedItem.Value

K>Я сталкивался с такими проблемами.



Так можно все необходимые данные вычитать в рамках одно транзакции... Хотя, если их
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.