2 Stimmen

ListBox - Wert wird auf Textfeld gesetzt

Problem: Beim Hinzufügen von Listenelementen wird das Feld Wert auf das Feld Text gesetzt. Ursprünglich dachte ich, dass das Problem mit dem Eingabeparameter für den Primärschlüssel (group_type_id) zusammenhängt, da er als OUTPUT-Variable konfiguriert ist.

Interessanterweise ist alles korrekt, wenn ich alle Werte beobachte. Ich beobachte also zum Beispiel diese:

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

Wenn der Artikel jedoch erstellt wird,

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

Ich bin ratlos, warum die Werte in der Listbox auf die Textwerte gesetzt werden, wenn ich deutlich sehen kann, dass die Werte im Datenleser korrekt sind. ?

Codebeispiel hier:

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;            
}

Verfahren:

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

0voto

Daniel Ahrnsbrak Punkte 1067

Es ist fast sicher die as string die die Probleme verursacht. "as" wird standardmäßig auf null wenn es die Konvertierung nicht durchführen kann. Ein ListItem setzt den Wert auf den gleichen Wert wie den Text, wenn der Wert keine gültige Zeichenkette ist. Verwenden Sie stattdessen ddr["grouptypeid"].ToString() .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X