簡體   English   中英

類顯示在列表框中,而不是實際的字符串值

[英]Class is showing up in Listbox and not the actual string value

首先,這就是正在發生的事情。 在此處輸入圖片說明

當我從組合框中從數據庫中選擇一個表時,我希望所有列名都顯示出來(列名是“ P101”,“ P102”等。),但是我還希望每個列的擴展屬性值出現由於某種原因未顯示的情況。

這是我在C#中的SP:

[Function(Name = "SP_GET_EXTENDED_PROPERTY", IsComposable = false)]
public ISingleResult<StandardDefinition> GetExtendedProperty(
    [Parameter(Name = "@ptableName", DbType = "VARCHAR(50)")] string tableName,
    [Parameter(Name = "@pcolumnName", DbType = "VARCHAR(50)")] string columnName)
{
    IExecuteResult objResult = this.ExecuteMethodCall(this, (MethodInfo)(MethodInfo.GetCurrentMethod()),tableName, columnName);

    ISingleResult<StandardDefinition> objresults = (ISingleResult<StandardDefinition>)objResult.ReturnValue;

    return objresults;
}

該存儲過程鏈接到SQL中的此查詢(該查詢已經過測試並且可以工作):

SELECT value as _value FROM fn_listextendedproperty
(NULL, 'schema', 'dbo', 'table', 'Acceptance', 'column', 'P101');

我傳遞的列名和表名是正確的,並且在調試后可以正常工作,並且SQL中的查詢是正確的,因此我不知道出了什么問題,這是我選擇組合框的C#代碼。

    foreach (StandardDefinition standardDefinition in _StandardFields)
    {
        _wrapperSD = new WrapperStandardDefinition(Properties.Settings.Default.AppConnectionString,standardName,standardDefinition.Column_name);

        _SD = _wrapperSD.GetStandardQuestion();

        lstQuestions.Items.Add(string.Format("{0} ( {1} ) ", _standardDefinition, standardDefinition.Column_name));
    }

    public ISingleResult<StandardDefinition> GetStandardQuestion()
    {
        _SP = new StoredProcedures(_connection);

        return _SP.GetExtendedProperty(_selectedStandard, _columnName);
    }

這行在這里:

lstQuestions.Items.Add(string.Format("{0} ( {1} ) ", _standardDefinition, standardDefinition.Column_name));

.ToString()作為參數傳遞給string.Format()時,會在_standardDefinition上隱式調用。 我相信這就是給你班級名稱的原因。

如果希望它返回不同的值,則可以覆蓋該類中的.ToString()方法。 或者,您可以傳入所需的值,例如_standardDefinition.MyPropertyWithDesiredValue ,而不是對象本身。

您正在將自定義StandardDefinition對象傳遞給Framework進行顯示,但您尚未告訴它如何顯示它,因此WPF使用該類型的名稱:

DAL.Entities.StandardDefinition

顯示更有意義的內容的最快,最簡單的方法是簡單地覆蓋object.ToString方法,因為這是WPF默認情況下嘗試使用的方法。 因此,如果您要執行以下操作...:

public override string ToString()
{
    return string.Format("{0}: {1}", SomeProperty, SomeOtherProperty);
}

...您的輸出可能是這樣的:

Some value: some other value

對於文本輸出而言,這可能會很好,但是改善這些項目的顯示的另一種方法是讓您聲明一個DataTemplate ,該DataTemplate定義每個項目的外觀。 您可以這樣做:

<DataTemplate DataType="{x:Type Entities:StandardDefinition}">
    <!-- Define what the item should look like here -->
</DataTemplate>

暫無
暫無

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

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