C# DataGridTextColumn以显示由代码选择的说明
在CodeBehind,我有一个从数据库中获取的代码列表及其描述。 例如:{(代码1,描述1),(代码2,描述2)} 我将其存储为我的代码隐藏中的C# DataGridTextColumn以显示由代码选择的说明,c#,wpf,data-binding,datagrid,C#,Wpf,Data Binding,Datagrid,在CodeBehind,我有一个从数据库中获取的代码列表及其描述。 例如:{(代码1,描述1),(代码2,描述2)} 我将其存储为我的代码隐藏中的Dictionary StatusText 页面的数据源是一个xml文件,即加载到XmlFile中并设置为页面的数据上下文Reports是XmlFile的成员,是数据网格的源数组 datagrid的“状态”列绑定到报告。StatusCode。我需要使用StatusCode从StatusText中查找值,并在“Status”列中显示值部分 现在我需要在D
Dictionary StatusText
页面的数据源是一个xml文件,即加载到XmlFile
中并设置为页面的数据上下文Reports
是XmlFile
的成员,是数据网格的源数组
datagrid的“状态”列绑定到报告。StatusCode
。我需要使用StatusCode
从StatusText
中查找值,并在“Status”列中显示值部分
现在我需要在DataGrid中显示代码值的相应描述,我几乎不知所措。datagrid必须是不可编辑的,因此我更喜欢DataGridTextColumn或类似的列类型
我对wpf比较陌生
XAML
好的,您的问题是您试图显示绑定到
DataGrid
的数据集合中不存在的内容。答案很简单。。。将其添加到集合中。这是一种在将其设置为DataGrid.ItemsSource
之前执行此操作的方法:
foreach (Report report in Reports)
{
report.StatusCode = StatusText[report.StatusCode];
}
这将用描述替换StatusCode
属性中的代码。如果不想替换该值,则可以在报告中添加一个额外的列
类:
public string StatusDescription { get; set; }
您是否介意共享一些代码,以便其他人更好地了解您的问题?如果这里有人能够为您提供示例解决方案代码,我们需要知道您的属性的名称和类型。请告诉我们你的课程。你面临的问题。请输入一些代码..按建议添加代码。问题点位于datagrid中的“RptStatus”。我的(键、值)对是“状态文本”。我需要根据“Report.StatusCode”的值将此值显示在“RptStatus”中,正如您可能看到的,我的网格源是“Reports”,您必须简化您的问题,有太多令人困惑的代码。谢谢@Sheridan,我通过添加一个额外的列来完成此操作。我之所以要寻找“从列表中选择”的解决方案,是因为我需要为更多的列使用相同的逻辑。虽然我知道绑定功能强大,但如果您是从早期机制迁移过来的,它太复杂了,无法很好地理解这个概念。虽然我从您上次的评论中理解您的感受,我不同意数据绑定的复杂性。。。您可以从MSDN的页面上找到所有需要了解的信息。此外,学习
绑定
将在未来的WPF应用程序中帮助您。
namespace Helper
{
[Serializable]
[XmlRoot("XML_FILE")]
public class XmlFile : INotifyPropertyChanged
{
private Report[] _reports;
[XmlArray("REPORTS")]
[XmlArrayItem("REPORT", typeof (Report))]
public Report[] Reports
{
get { return _reports; }
set
{
if (value != _reports)
{
_reports = value;
NotifyPropertyChanged("Reports Changed");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
[Serializable]
public class Report : INotifyPropertyChanged
{
private string _reportType;
[XmlAttribute("TYPE")]
public string ReportType
{
get { return _reportType; }
set
{
if (value != _reportType)
{
_reportType = value;
NotifyPropertyChanged("ReportType");
}
}
}
[XmlElement("FILE")]
public string FileName { get; set; }
[XmlElement("S_DT")]
public string SubmitDate { get; set; }
[XmlElement("STAT")]
public string StatusCode { get; set; }
[XmlElement("OVER")]
public string OverDue { get; set; }
[XmlElement("INCM")]
public string InComplete { get; set; }
[XmlElement("DESC")]
public string Description { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
}
foreach (Report report in Reports)
{
report.StatusCode = StatusText[report.StatusCode];
}
public string StatusDescription { get; set; }