【发布时间】:2019-10-03 01:14:36
【问题描述】:
我使用 unicode 列创建 datagridview,例如:
private void GetUnicodeFormat()
{
string unicodeString = "\u2605";
OneStar = unicodeString;
TwoStar = unicodeString + unicodeString;
ThreeStar = unicodeString + unicodeString + unicodeString;
FourStar = unicodeString + unicodeString + unicodeString + unicodeString;
FiveStar = unicodeString + unicodeString + unicodeString + unicodeString + unicodeString;
}
然后我在datagridview中设置如下:
foreach (DataGridViewRow row in dgvProjectRanking.Rows)
{
var cellNumberValue = int.Parse(row.Cells[contractedColumnIndex].Value.ToString());
if (cellNumberValue <= 20)
{
row.Cells[scoreColumnIndex].Value = OneStar;
}
else if (cellNumberValue > 20 && cellNumberValue < 40)
{
row.Cells[scoreColumnIndex].Value = TwoStar;
}
else if (cellNumberValue >= 40 && cellNumberValue < 60)
{
row.Cells[scoreColumnIndex].Value = ThreeStar;
}
else if (cellNumberValue >= 60 && cellNumberValue < 80)
{
row.Cells[scoreColumnIndex].Value = FourStar;
}
else if (cellNumberValue >= 80 && cellNumberValue <= 100)
{
row.Cells[scoreColumnIndex].Value = FiveStar;
}
}
这行得通,我在 DataGridView 中得到了星星。但现在我想通过 SQL 发送值,所以我在 sql 中创建函数,例如:
CREATE FUNCTION [HELPER].[udf_ProjectContractedPercentage_Set]
(
@ProjectContractedPercentage INT
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @NewProjectContractedPercentage VARCHAR(MAX)
,@StarUnicode VARCHAR(10) = '\u2605';
SELECT
@NewProjectContractedPercentage = (CASE
WHEN @ProjectContractedPercentage <= 20
THEN @StarUnicode
WHEN @ProjectContractedPercentage > 20
AND @ProjectContractedPercentage < 40
THEN CONCAT(@StarUnicode , @StarUnicode)
WHEN @ProjectContractedPercentage >= 40
AND @ProjectContractedPercentage < 60
THEN CONCAT(@StarUnicode , @StarUnicode , @StarUnicode)
WHEN @ProjectContractedPercentage >= 60
AND @ProjectContractedPercentage < 80
THEN CONCAT(@StarUnicode , @StarUnicode , @StarUnicode , @StarUnicode )
WHEN @ProjectContractedPercentage >= 80
AND @ProjectContractedPercentage <= 100
THEN CONCAT(@StarUnicode , @StarUnicode , @StarUnicode , @StarUnicode , @StarUnicode)
END)
RETURN
@NewProjectContractedPercentage
END
所以我收到如下值:
我需要在 c# 中做什么才能将此值转换为星号?,我不知道如果我在 c# 代码中有 unicode 值或从存储过程接收有什么区别。我认为它完全相同,但不起作用,所以我不知道为什么不这样做。非常感谢您的帮助!
【问题讨论】:
-
我认为这可能很有趣:stackoverflow.com/questions/144283/…
-
为什么不存储一个 0 到 5 的值来表示多少颗星?如果您曾经将成语更改为“竖起大拇指”或其他符号,那么更改将是微不足道的。您几乎不必循环通过 DGV 来控制外观 - 使用单元格格式化或 rowprepaint 事件
-
我将函数更改为 nvarchar 但仍然得到相同的结果@ADyson
标签: c# sql-server winforms unicode