试图在数据网格中显示数据列表
trying to display a list of data in a datagrid
我正在尝试在 WPF 数据网格中显示数据列表,因为文本块只是将数据放在一起而没有任何类型的格式设置(我希望此数据的格式设置已为我完成)。
这是背后的代码
public void OnMessageReceived(object sender, MessageReceivedEventArgs e)
{
try
{
if (e == null)
return;
if (e.CmsData != null)
{
List<string> mylist = new List<string>();
foreach (var item in e.CmsData.Agents)
{
mylist.Add(item.AgName);
mylist.Add(item.AuxReasonDescription);
}
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
this.datagrid.ItemsSource = mylist;
}));
}
}
}
我用来填充数据网格的XAML
<Grid Height="100" Width="178.201">
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Path=mylist, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="datagrid" Background="{x:Null}" Loaded="textBlock_Loaded"/>
</Grid>
这是 agents.cs 文件,其中包含我正在尝试拉入我的数据网格的变量,以备不时之需。
public class Agent : IEquatable<Agent>
{
public int Extension { get; set; }
public int WorkModeDirection { get; set; }
public string WorkModeDirectionDescription { get; set; }
public TimeSpan AgTime { get; set; }
public int AuxReason { get; set; }
public string AuxReasonDescription { get; set; }
public int DaInQueue { get; set; }
public int WorkSkill { get; set; }
public int OnHold { get; set; }
public int Acd { get; set; }
public String LoginId { get; set; }
public string AgName { get; set; }
public int EId { get; set; }
public int Preference { get; set; }
public DateTime DateTimeCreated { get; set; }
public DateTime DateTimeUpdated { get; set; }
public int CmId { get; set; }
#region Implementation of IEquatable<Agent>
public bool Equals(Agent other)
{
if (ReferenceEquals(null, other))
return false;
if (ReferenceEquals(this, other))
return true;
return (other.LoginId == LoginId & other.CmId == CmId);
}
#endregion
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
return false;
if (ReferenceEquals(this, obj))
return true;
if (obj.GetType() != typeof(Agent))
return false;
return Equals((Agent)obj);
}
//public override int GetHashCode()
//{
// return LoginId;
//}
public override int GetHashCode()
{
string combinedNumber = "" + CmId + LoginId;
int hash = Convert.ToInt32(combinedNumber);
return hash;
}
public static bool operator ==(Agent left, Agent right)
{
return Equals(left, right);
}
public static bool operator !=(Agent left, Agent right)
{
return !Equals(left, right);
}
public override string ToString()
{
return " Ag: [Ext:" + Extension + " login:" + LoginId + " AgName:" + AgName + " CmId:" + CmId + "]";
}
public bool IsValid()
{
return LoginId != null;
}
}
这是当前显示的内容...其中不包含任何我要打印出来的信息,我也不知道这些数字是从哪里来的。
您正在尝试将 DataGrid 绑定到一个完全没有意义的字符串列表。绑定到 DataGrid 的列表中的每个项目都应该代表网格中的一行。
由于您试图在每行中显示单个代理数据,因此您应该直接绑定到代理列表。
试试这个;
public void OnMessageReceived(object sender, MessageReceivedEventArgs e)
{
try
{
if (e == null)
return;
if (e.CmsData != null)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
this.datagrid.ItemsSource = e.CmsData.Agents;
}));
}
}
但请记住,这将为代理对象的每个 public 属性 生成列。要指定要显示的列,请检查另一个 SO 问题的答案:
您应该将 DataGrid
的 ItemsSource
设置为 List<Agent>
:
public void OnMessageReceived(object sender, MessageReceivedEventArgs e)
{
try
{
if (e == null)
return;
if (e.CmsData != null)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
this.datagrid.ItemsSource = e.CmsData.Agents.ToList();
}));
}
}
}
...并为要在 XAML 的 DataGrid
中显示的 Agent
class 的每个 属性 定义一列标记:
<DataGrid AutoGenerateColumns="False"
x:Name="datagrid" Background="{x:Null}">
<DataGrid.Columns>
<DataGridTextColumn Header="AgName" Binding="{Binding AgName}" />
<DataGridTextColumn Header="AuxReasonDescription" Binding="{Binding AuxReasonDescription}" />
</DataGrid.Columns>
</DataGrid>
我正在尝试在 WPF 数据网格中显示数据列表,因为文本块只是将数据放在一起而没有任何类型的格式设置(我希望此数据的格式设置已为我完成)。
这是背后的代码
public void OnMessageReceived(object sender, MessageReceivedEventArgs e)
{
try
{
if (e == null)
return;
if (e.CmsData != null)
{
List<string> mylist = new List<string>();
foreach (var item in e.CmsData.Agents)
{
mylist.Add(item.AgName);
mylist.Add(item.AuxReasonDescription);
}
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
this.datagrid.ItemsSource = mylist;
}));
}
}
}
我用来填充数据网格的XAML
<Grid Height="100" Width="178.201">
<DataGrid AutoGenerateColumns="True" ItemsSource="{Binding Path=mylist, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="datagrid" Background="{x:Null}" Loaded="textBlock_Loaded"/>
</Grid>
这是 agents.cs 文件,其中包含我正在尝试拉入我的数据网格的变量,以备不时之需。
public class Agent : IEquatable<Agent>
{
public int Extension { get; set; }
public int WorkModeDirection { get; set; }
public string WorkModeDirectionDescription { get; set; }
public TimeSpan AgTime { get; set; }
public int AuxReason { get; set; }
public string AuxReasonDescription { get; set; }
public int DaInQueue { get; set; }
public int WorkSkill { get; set; }
public int OnHold { get; set; }
public int Acd { get; set; }
public String LoginId { get; set; }
public string AgName { get; set; }
public int EId { get; set; }
public int Preference { get; set; }
public DateTime DateTimeCreated { get; set; }
public DateTime DateTimeUpdated { get; set; }
public int CmId { get; set; }
#region Implementation of IEquatable<Agent>
public bool Equals(Agent other)
{
if (ReferenceEquals(null, other))
return false;
if (ReferenceEquals(this, other))
return true;
return (other.LoginId == LoginId & other.CmId == CmId);
}
#endregion
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
return false;
if (ReferenceEquals(this, obj))
return true;
if (obj.GetType() != typeof(Agent))
return false;
return Equals((Agent)obj);
}
//public override int GetHashCode()
//{
// return LoginId;
//}
public override int GetHashCode()
{
string combinedNumber = "" + CmId + LoginId;
int hash = Convert.ToInt32(combinedNumber);
return hash;
}
public static bool operator ==(Agent left, Agent right)
{
return Equals(left, right);
}
public static bool operator !=(Agent left, Agent right)
{
return !Equals(left, right);
}
public override string ToString()
{
return " Ag: [Ext:" + Extension + " login:" + LoginId + " AgName:" + AgName + " CmId:" + CmId + "]";
}
public bool IsValid()
{
return LoginId != null;
}
}
这是当前显示的内容...其中不包含任何我要打印出来的信息,我也不知道这些数字是从哪里来的。
您正在尝试将 DataGrid 绑定到一个完全没有意义的字符串列表。绑定到 DataGrid 的列表中的每个项目都应该代表网格中的一行。
由于您试图在每行中显示单个代理数据,因此您应该直接绑定到代理列表。
试试这个;
public void OnMessageReceived(object sender, MessageReceivedEventArgs e)
{
try
{
if (e == null)
return;
if (e.CmsData != null)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
this.datagrid.ItemsSource = e.CmsData.Agents;
}));
}
}
但请记住,这将为代理对象的每个 public 属性 生成列。要指定要显示的列,请检查另一个 SO 问题的答案:
您应该将 DataGrid
的 ItemsSource
设置为 List<Agent>
:
public void OnMessageReceived(object sender, MessageReceivedEventArgs e)
{
try
{
if (e == null)
return;
if (e.CmsData != null)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
{
this.datagrid.ItemsSource = e.CmsData.Agents.ToList();
}));
}
}
}
...并为要在 XAML 的 DataGrid
中显示的 Agent
class 的每个 属性 定义一列标记:
<DataGrid AutoGenerateColumns="False"
x:Name="datagrid" Background="{x:Null}">
<DataGrid.Columns>
<DataGridTextColumn Header="AgName" Binding="{Binding AgName}" />
<DataGridTextColumn Header="AuxReasonDescription" Binding="{Binding AuxReasonDescription}" />
</DataGrid.Columns>
</DataGrid>