【问题标题】:ListBox - value being set to text fieldListBox - 值被设置为文本字段
【发布时间】:2011-07-08 09:11:07
【问题描述】:

问题: 添加列表项时,值字段被设置为文本字段。最初我虽然问题与主键( 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

【问题讨论】:

    标签: c# asp.net data-binding listbox


    【解决方案1】:

    几乎可以肯定是as string 导致了问题。如果不能进行转换,“as”将默认为null。如果 Value 不是有效字符串,ListItem 会将 Value 设置为与 Text 相同。而是使用ddr["grouptypeid"].ToString()

    【讨论】:

    • 那么请将我的回答标记为回答您问题的那个。
    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2021-04-02
    • 2019-02-15
    • 1970-01-01
    相关资源
    最近更新 更多