0

SQL Server 2008 にテーブルがあり、値 ID ごとにカンマ区切りの値のリストを挿入しました。

そのため、フロントエンドで から特定の id を選択するとDropDownList、カンマ区切りの値を に個別に取得したいと考えていますListBox

私の質問が明確であることを願っています。親切に助けて...

4

4 に答える 4

2

これを試して

 //doing this in front end - C#
 string values = getValuesFromDB(dropdownList.SelectedValue);
 myListBox.DataSource = values.Split(',');
 myListBox.DataBind();

また

 foreach(string s in values.Split(','))
 {
   myListBox.Items.Add(s);
 }

CSVをテーブルに変換する方法を示すSOに関する回答もあり、使用しているSQLデータベースを尋ねないことをお詫びします。

アップデート

private string getValuesFromDB(string selectedID)
{
    //this might not be the rea; query
    string query = "SELECT commaValues FROM myTable WHERE id = " + selectedID; 
    ....
    ....
    string commaSeparatedValues = "retrieved values from this recod";
    return commaSeparatedValues;
}
于 2012-09-07T06:32:31.577 に答える
0

文字列分割関数を使用すると、リストボックスで割り当てるためにループできる配列の値が得られます

擬似コード

string myids = //data retrived from DB
string [] id = myids.split(',') //I assume , as delimiter
//loop thorugh id array and assign it to listbox item.
for(int i=0; i<id.Length; i++)
{
listbox1.items.add(id[i]); //Assuming listbox1 is your Listbox control
}

構文エラーがある可能性がありますが、私はあなたがアイデアを得たと思います。

于 2012-09-07T06:39:53.700 に答える
0

以下は例です。データがテーブルに入ると、リストボックスにデータを簡単にバインドできます。

ステップ1

SQLServerウィンドウで次の手順を実行します。

fn_CommaSeparatedStringToTable関数は、コンマ区切りの文字列と値('Y'または'N')を受け入れて、結果セットにNULL文字列とEMPTY文字列を含めます。

ALTER FUNCTION [dbo].[fn_CommaSeparatedStringToTable]
(
 @CommaSeparatedValues     VARCHAR(MAX),
 @IncludeEmptyStrings    CHAR(1)
)
RETURNS @Item TABLE 
(
   RowId int IDENTITY(1, 1) NOT NULL, 
   Value VARCHAR(200)
)
 AS
  BEGIN

      DECLARE @IndefOfComma int,
     @Value VARCHAR(200),@StartPos bigint,@EndPos 

      bigint,@LengthOfString int, @ReachedEnd Char(1)

  SET @StartPos=1
  SET @EndPos=0
  SET @LengthOfString=LEN(@CommaSeparatedValues)
  SET @ReachedEnd='N'

  WHILE @ReachedEnd<>'Y'
        BEGIN
              SET @EndPos=CHARINDEX(',',@CommaSeparatedValues,@StartPos)
              IF @EndPos>0
              BEGIN
                  SET @Value = SUBSTRING(@CommaSeparatedValues, @StartPos,@EndPos-  
 @StartPos) 
                  SET @StartPos=@EndPos+1      
              END
              ELSE
              BEGIN
                 SEt @ReachedEnd='Y'
                 SET @Value = SUBSTRING(@CommaSeparatedValues,   
 @StartPos,@LengthOfString-(@StartPos-1))
              END
              IF(@Value<>'' OR @IncludeEmptyStrings='Y')
              INSERT INTO @Item(Value) VALUES(@Value)
  END
  RETURN
 END

ステップ2

関数にアクセスするには、次のクエリを使用します

  Include Empty or Null String in the result

  SELECT * FROM [dbo].[fn_CommaSeparatedStringToTable]
  ('ALICE,BRAD,JOHN,JOE,MIC,SCAIF,JEMY, ,','Y')


 Do not include Empty or Null String in the result 
SELECT * FROM [dbo].[fn_CommaSeparatedStringToTable]
('ALICE,BRAD,JOHN,JOE,MIC,SCAIF,JEMY, ,','N')
于 2012-09-07T06:40:01.733 に答える
0

この方法で値をデータベースに保存することはお勧めできません。理由は次のとおりです。

1: ドロップダウンリストに入力したい場合は、次のように異なる ID が必要な場合があります。

1 - First Otion
3 - Second Option
11 - Third Option

その場合、値だけからデコードするのは困難です。

2: 解析するのに常に時間がかかります。ストレージはそれほど「高価」ではなく、プロセッサ時間もそれほど高くないため、これは間違いなく良い戦略ではありません。

ただし、それを変更したり、SQL レベルで解決したい場合は、区切り文字列を解析する SQL 関数を記述できます。

このようなことを行っている SQL 関数が役立ちます。

DECLARE @string varchar(500)

--Here comes the selected one
SELECT @string = Value FROM List WHERE ID = 2

DECLARE @pos int
DECLARE  @id int
DECLARE @piece varchar(500)

DECLARE @returnTable table(
ID int,
Value varchar(64)
)

SET @id = 0

IF right(rtrim(@string),1) <> ','
 SET @string = @string  + ','

SET @pos =  patindex('%,%' , @string)
WHILE @pos <> 0 
BEGIN
 SET @piece = left(@string, @pos - 1)

 INSERT INTO @returnTable VALUES(@id, @piece)

 SET @id = @id + 1

 SET @string = stuff(@string, 1, @pos, '')
 SET @pos =  patindex('%,%' , @string)
END

SELECT * FROM @returnTable
于 2012-09-07T06:43:33.420 に答える