Идентификатор строки запроса из Combobox

отредактировано 04:37 Раздел: FastReport .NET
На диалоговое окно положил колонку из источника данных, задал ему вид ComboBox.
Запрос источника данных простой
select T.Id, T.Name
FROM Table T
В ComboBox'е отображается Name, после нажатия пользователем OK, мне надо получить значение Id выбранной в донном Combo строки.
Как это сделать?

Комментарии

  • отредактировано 04:37
    Id можно получить путем перебора записей в источнике данных. Если просто стоит задача отфильтровать источник по выбранному в комбобоксе значению - ничего делать не надо, источник будет отфильтрован автоматически после нажатия ОК.
  • отредактировано 04:37
    AlexTZ написал: »
    Id можно получить путем перебора записей в источнике данных.
    это не вариант! на больших объемах данных - затратно.
    AlexTZ написал: »
    Если просто стоит задача отфильтровать источник по выбранному в комбобоксе значению - ничего делать не надо, источник будет отфильтрован автоматически после нажатия ОК.
    задача стоит получить Id выбранной пользователем записи.

    перефразирую:
    как получить перемещение курсора по источнику данных путем перемещения (выбора) соответствующей записи в Combo?
  • отредактировано 04:37
    Поставьте у комбобокса св-во AutoFilter=false. Определите обработчик у кнопки ОК:
        private void btnOk_Click(object sender, EventArgs e)
        {
          // фильтруем источник данных
          EmployeesComboBox.FilterData();
          Report.GetDataSource("Employees").Init();
          
          // сейчас в источнике одна запись, соответствующая выбранному эл-ту в комбобоксе
          // получаем значение нужного нам поля
          MessageBox.Show(((Int32)Report.GetColumnValue("Employees.EmployeeID")).ToString());
        }
    
  • отредактировано 04:37
    если таким образом настроить для второго из 2х связанных Combo, то не получается его заполнять...
  • отредактировано 04:37
    После некоторых мучений нашел только вариант перебора подходящим для своей задачи
    Кому интересно:
        private int FindRowId (string TableName, string searchFieldName, string searchFieldValue, string IdFieldName)
        {
          if (searchFieldValue.Length > 0)
          {
            DataSourceBase vData = Report.GetDataSource(TableName);
            vData.Init();
            
            while (vData.HasMoreRows)
            {
              if (vData[vData.Columns.FindByAlias(searchFieldName)].ToString() == searchFieldValue)
              {
                return Convert.ToInt32(vData[vData.Columns.FindByAlias(IdFieldName)]);;
              }
              vData.Next();
            }
          }
          return 0;
        }
    
    Но все же не нравится мне такой вариант :) кривовато :)

    Кто что подскажет???

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.