ListBox - значение устанавливается в текстовое поле - PullRequest
2 голосов
/ 04 марта 2011

Проблема: при добавлении элемента списка в поле Значение устанавливается текстовое поле.Сначала я думал, что проблема связана с входным параметром для первичного ключа (group_type_id), поскольку он настроен как переменная OUTPUT.

Достаточно интересно, когда я смотрю все значения, все правильно.Так, например, я буду наблюдать за этим:

ddr["group_type_name"]   comes out as "Dept"
ddr["grouptypeid"] comes out as 4

Однако, когда элемент создан,

itms.TEXT = "Dept"
itms.Value = "Dept"  <-- THIS IS THE PROBLEM

Я в недоумении, почему значения списка устанавливаются натекстовые значения, когда я могу четко видеть, значения для чтения данных являются правильными.?

Пример кода здесь:

DbDataReader ddr = grp.GetGroupTypeList(grp);
if (ddr.HasRows)
{
    ListItem itm = new ListItem();
    itm.Text = "Select Group";
    itm.Value = "0";
    lb.Items.Add(itm);
    while (ddr.Read())
    {
        ListItem itms = new ListItem(ddr["group_type_name"] as string, ddr["grouptypeid"] as string);
    }
    lb.SelectedValue = lbSelected;            
}

процедура:

ALTER PROCEDURE [dbo].[asp_Group_Type]
@driver             char(1)='I',
@group_type_id      int=null OUTPUT,
@group_type_name    varchar(50)=null,
@par_group_id       int=null,
@active             bit 
AS
DECLARE @SQL    varchar(8000)
DECLARE @boolWhere varchar(10)
SET @boolWhere = ' WHERE ' 

SET NOCOUNT ON

IF (@driver = 'I')
    BEGIN
        INSERT INTO  [dbo].[group_type]
       ([group_type_name],
        [Par_Group_Id])
     VALUES
       (RTRIM(LTRIM(@group_type_name)),
        @par_group_id)

        SELECT @group_type_id = SCOPE_IDENTITY() 
    END

IF (@driver = 'U')
    BEGIN
        UPDATE  [dbo].[group_type]
           SET [group_type_name] = RTRIM(LTRIM(@group_type_name))
              ,[Par_Group_Id] = @par_group_id
         WHERE [group_type_id] = @group_type_id
    END

IF (@driver = 'S')
    BEGIN


        SET @SQL = ' SELECT  [group_type_id] AS [grouptypeid], [group_type_id], [group_type_name],[Par_Group_Id]  FROM [dbo].[group_type] '

        IF (@group_type_id > 0)
            BEGIN
                SET @SQL = @SQL + @boolWhere + '[group_type_id] = ''' + CAST(@group_type_id AS VARCHAR) + ''''
                SET @boolWhere = ' AND '
            END 

        IF (@active > 0)
            BEGIN
        SET @SQL = @SQL + @boolWhere + ' [active] = ''' + CAST(@active AS VARCHAR) + ''''
            END 

        SET @SQL = @SQL + ' ORDER BY [group_type_name] '
        PRINT(@SQL)
        EXEC(@SQL)
    END

1 Ответ

0 голосов
/ 04 марта 2011

Это почти наверняка as string, что вызывает проблемы.«as» по умолчанию будет null, если не может выполнить преобразование.ListItem установит значение равным тексту, если значение не является допустимой строкой.Вместо этого используйте ddr["grouptypeid"].ToString().

...