powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / CheckBoxList
7 сообщений из 7, страница 1 из 1
CheckBoxList
    #32677573
Yuliaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть DataGrid, в него вложен DataList с шаблоном CheckBoxList. Мне нужно все выделенные записи в CheckBoxList сохранить в базу данных. Выделяю, и начинаю сохранять, при сохранении просматриваю весь CheckBoxList таким образом:

for i:=0 to count_grid-1 do begin
for n:=0 to (dgParent.Items.Item .FindControl('dlChild') as DataList).Items.Count - 1 do
begin
if (((dgParent.Items.Item.FindControl('dlChild') as DataList).Items.Item[n].FindControl('cb')) as CheckBoxlist).Items.Item[n].Selected then
begin
//добавление в базу
end;
end;


Первый элемент сохраняется и цикл проходит нормально, а когда переходит к следующему элементу, количество CheckBoxList.Items.Count становится равным нулю.
Помогите пожалуйста! Как сделать чтобы элементы CheckBoxList не исчезали?
...
Рейтинг: 0 / 0
CheckBoxList
    #32677601
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так попробывать?
Код: plaintext
1.
2.
3.
4.
...
xxx =  (dgParent.Items.Item.FindControl('dlChild') as DataList).Items.Count -  1 
for n:= 0  to xxx do
....

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
CheckBoxList
    #32677681
Yuliaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибка то вот в этой строке, т.е. CheckBoxList.Items.count = 0
Ошибка такая:

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index

Source Error:

Line 477: if (((dgParent.Items.Item .FindControl('dlChild') as DataList).Items.Item[n].FindControl('cb')) as CheckBoxList).Items.Item[n].Selected then
Line 478: begin
...
Рейтинг: 0 / 0
CheckBoxList
    #32677794
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у CheckBoxList есть свойство CheckedItems.
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/cpref/html/frlrfSystemWindowsFormsCheckedListBoxClassCheckedIndicesTopic.htm
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
private void WhatIsChecked_Click(object sender, System.EventArgs e) {
     // Display in a message box all the items that are checked. 

     // First show the index and check state of all selected items. 
    foreach(int indexChecked in checkedListBox1.CheckedIndices) {
         // The indexChecked variable contains the index of the item. 
        MessageBox.Show("Index#: " + indexChecked.ToString() + ", is checked. Checked state is:" +
                        checkedListBox1.GetItemCheckState(indexChecked).ToString() + ".");
    }

     // Next show the object title and check state for each item selected. 
    foreach(object itemChecked in checkedListBox1.CheckedItems) {

         // Use the IndexOf method to get the index of an item. 
        MessageBox.Show("Item with title: \"" + itemChecked.ToString() + 
                        "\", is checked. Checked state is: " + 
                        checkedListBox1.GetItemCheckState(checkedListBox1.Items.IndexOf(itemChecked)).ToString() + ".");
    }

}
...
Рейтинг: 0 / 0
CheckBoxList
    #32677795
Фотография Max Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По одному элементу не желательно сохранять. Сохранять надо массив. Правда Аксес не позволяет сохранять массивы, зато ежели ты работаешь с SQL-сервером или Oracle, то там можно построить запрос (всего один), сохраняющий в БД весь массив данных. Почему у тебя обнуляется число элементов, я не знаю, возможно это связано с тем чёрным ящиком, который представляет из себя процедура сохранения в БД.
Итак, раскладываю по полочкам:
1. Ты пишешь судя по коду на Паскале (или как сейчас модно его называть Дельфи). Я не знаю, поддерживает ли Паскаль объектный тип данных, но он поддерживает тип "запись".Вот и создай массив элементов типа "запись". Заполни его в цикле:
program abc (input,output);
var
array1[1..CheckBoxList.Items.Count] :record(не помню как выглядит описание типа рекорд);
i:integer;
imax:integer;
sqlString:text;
begin
imax:=CheckBoxList.Items.Count
for i:=1 to imax
if CheckBoxList.Items[i-1].selected=true then
{заполнение массива}
next i;
sqlString:="insert into ..."
{процедура подключения к БД};
{процедура взятия запроса SQL};
{процедура отключения от БД}
end.
2. Я прошу прощения, уже 10 лет не работал с Паскалем, забыл всё нафиг, помню только, что в 5-й версии отменили запрет ставить точку с запятой перед end. Короче предлагаю сперва массив заполнить, потом сделать строку запроса SQL, а потом осуществить запрос. Так как построчно брать запросы слишком медленно.
Max Pro
...
Рейтинг: 0 / 0
CheckBoxList
    #32677824
Фотография profil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слажал... не заметил родной паскаль
...
Рейтинг: 0 / 0
CheckBoxList
    #32677826
Yuliaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за ответы! Буду разбираться
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / CheckBoxList
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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