我在 SQL Server 2008 中有一个表,其中对于每个值 id,我插入了一个以逗号分隔的值列表。
所以在前端,当我从 中选择一个特定的 id 时DropDownList
,我想将逗号分隔的值分别检索到 aListBox
中。
希望我的问题很清楚。请帮助...
我在 SQL Server 2008 中有一个表,其中对于每个值 id,我插入了一个以逗号分隔的值列表。
所以在前端,当我从 中选择一个特定的 id 时DropDownList
,我想将逗号分隔的值分别检索到 aListBox
中。
希望我的问题很清楚。请帮助...
试试这个
//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);
}
还有一些关于 SO 的答案显示了如何将 CSV 转换为表格,很抱歉没有询问您使用的是哪个 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;
}
使用字符串拆分函数将为您提供数组中的值,您可以循环分配在列表框中
伪代码
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
}
可能存在语法错误,但我认为您明白了。
下面是示例一旦数据进入表格,您就可以轻松地将数据绑定到列表框中。
第1步
在 Sql Server 窗口中执行以下过程。
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')
以这种方式将值存储在数据库中并不是一个好主意,因为:
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