类在列表框中显示,而不是实际的字符串值

时间:2014-04-04 11:09:05

标签: c# sql wpf stored-procedures listbox

首先,这就是正在发生的事情。 enter image description here

当我从组合框中选择我的数据库中的表时,我想要显示他们所做的所有列名(列名是'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中的查询是正确的所以我不知道出了什么问题这是我选择Combobox的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);
    }

2 个答案:

答案 0 :(得分:2)

这一行:

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

.ToString()_standardDefinition作为参数传递给string.Format()时被隐式调用。我相信这就是为你提供课程名称。

如果您希望它返回不同的内容,您可以覆盖类中的.ToString()方法。或者你可以传递你想要的值,例如_standardDefinition.MyPropertyWithDesiredValue,而不是对象本身。

答案 1 :(得分:1)

您正在将一个自定义StandardDefinition对象传递给要显示的框架,但您还没有告诉它如何显示它,因此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 DataType="{x:Type Entities:StandardDefinition}">
    <!-- Define what the item should look like here -->
</DataTemplate>