Добрый день!
Подскажите, пожалуйста, логику работы DataGrid, совсем запутался.
Что я делаю:
- Есть SELECT запрос,
- есть DataSet к этому запросу,
- есть форма, на ней лежит управление и DataGrid с прописанным DatasetLink,
- есть не визуальный компонент DatasetLink (приписан соответственно),
- есть DataGridView, приписана к DataGrid,
- 2 столбца видимы.
Работает так - вводится в текстовое поле фильтр (в SELECT подставляется), нажимается кнопка и должны появиться записи в гриде, в соответствии с селектом. А ничего нет.
Я чувствую что я не делаю какую-то принципиальную вещь.
Спасибо заранее!
Нравится
Доброго времени суток, Алексей.
Тут: "Работает так - вводится в текстовое поле фильтр (в SELECT подставляется)" - подробнее пожалуйста. Какое поле, куда и как подставляется SELECT? Как он связан с DataGrid и DatasetLink.
В прочем, задача тоже пока не ясна.
Задача - найти в таблице tblContacts дубли фамилий, посчитать их количество, отобразить список найденных контактов в гриде.
У SELECT 2 поля - ID и Name FROM tbl_Contact WHERE фильтр типа LIKE по параметру, который включается программно.
При нажатии на, допустим, кнопку:
if (!Assigned(ds)) { var ds = Services.GetNewItemByUSI('ds_findDoubleFIO'); } var str = 'Яковлева Яна'; // Здесь данные из текстового поля ApplyDatasetFilter(ds, 'FIO', str, true); ds.Close(); ds.Open(); ShowInformationDialog(ds.RecordsCount;); // для проверки работоспособности ShowEditWindowEx('wnd_findDoubleFIO'); }
Количество записей показывает, т.е. датасет заполняется запросом.
Соответственно окно wnd_findDoubleFIO содержит небольшую инфу и грид, куда и надо вывести список записей датасета ds.
А как что связано у меня описано в первом сообщении.
Подскажите, что не так, пожалуйста.
Добрый день. В коде выше нет связи между ShowEditWindowEx('wnd_findDoubleFIO'); и отфильтрованым датасетом ds.
Попробуйте сначала сделать .Prepare() кокна.
Затем на его датасет наложить фильтр, или передать массивом ID записей, котороые оно должно отобразить.
В текущей реализации, окно wnd_findDoubleFIO открывается с пустым датасетом.
Я так понял - присвоение датасета гриду не означает что грид заполняется?
Если это так, то подскажите, пожалуйста, кодом - что надо дописать.
Спасибо!
Вы можете сразу с датасетом окна работать. не создавая датасет в конфигурации.
Пример из конфигурации:
var Window = GetSingleItemByCode('wnd_SearchForSolution'); Window.Prepare(); // обратитесь к датасету окна: var ds = Window.ComponentsByName('dlData').Dataset var str = 'Яковлева Яна'; // Здесь данные из текстового поля ApplyDatasetFilter(ds, 'FIO', str, true); RefreshDataset(ds); if(ds.RecordsCount > 0) { Window.Show(); }
Появилась новая проблема, мне нужно отображать в окне tbl_Contact.Name и ответственного за него, но в таблице tbl_Contact есть только tbl_Contact.OwnerID. Как мне в одном запросе и отобразить tbl_Contact.Name и найти Name по tbl_Contact.OwnerID ?
Или можно только программно сравнивать ID и подставлять в строчку уже NAME?
Заранее спасибо!
"Соляник Алексей" написал:Как мне в одном запросе и отобразить tbl_Contact.Name и найти Name по tbl_Contact.OwnerID ?
Если я правильно поняла проблему, то нужно отобразить ответственного по контакту?
В запросе sq_ContactЮ для поля ответсвенного есть 2 колонки: OwnerID (про которую Вы говорите, из таблицы tbl_Contact.OwnerID) и OwnerName (из таблицы tbl_Owner.Name, которая приджойнена к основной таблице: Left join tbl_Contact as tbl_Owner). В датасете для поля-справочника источник данных указан как ds_Owner.
Если же Вы и так работаете с датасетом Контакта, а значение нужно вывести в текстовое поле, то можно попробовать написать так:
var OwnerName = Dataset.DisplayValues('OwnerID')
или
var OwnerName = Dataset.DataFields('OwnerID').DisplayValue, что, в принципе, одно и то же...
Или Вы имели что-то другое ввиду, задавая этот вопрос?
Или Вы имели что-то другое ввиду, задавая этот вопрос?
Да, к сожалению другое.
Есть одна таблица tbl_Contact, в ней есть поля ID, Name, OwnerID и другие. Поле OwnerID - это ссылка на tbl_Contact.ID.
Т.е. по-русски говоря все контакты в одной таблице, у каждого есть ответственный (owner), который находится также в этой же таблице как простой контакт.
Алексей, в запросе sq_Contact присутствует колонка OwnerName, которая отображает Name ответственного у контакта.
Если Вам нужно строковое поле, которое будет отображать имя ответственного у контакта, добавьте в датасет поле со ссылкой на данную колонку.
Спасибо!!!
Сделал по аналогии с sq_Contact в своем запросе left join и все стало ок! Спасибо еще раз!