簡體   English   中英

從數據庫獲取之前格式化unicode

[英]Format unicode before get from database

我用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值或從存儲過程中接收到unicode值,我不知道有什么區別。 我認為這是完全一樣的,但是沒有用,所以我不知道為什么不這樣做。 幫助非常感謝!

您需要兩件事。 1.使用NVARCHAR,因為您正在使用Unicode。 2. NCHAR功能,可將代碼轉換為字符。

因此,而不是@StarUnicode VARCHAR(10) = '\★';

使用: @StarUnicode NVARCHAR(10) = NCHAR(0x2605);

以下更改應該起作用。 我在SQL 2017上進行了測試。

您正在使用的字符(星號)是Unicode字符。 使用Unicode字符時,應使用NCHAR和NVARCHAR。

ALTER FUNCTION [HELPER].[udf_ProjectContractedPercentage_Set]
(
             @ProjectContractedPercentage INT
)
RETURNS NVARCHAR(MAX)
AS
        BEGIN
            DECLARE @NewProjectContractedPercentage NVARCHAR(MAX)
                    ,@StarUnicode  NCHAR(1) = NCHAR(9733);

          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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM