public void LoadData()
{
sy.OpenFileDialog op = new sy.OpenFileDialog();
op.Multiselect = true;
if (op.ShowDialog() == sy.DialogResult.OK)
{
for each (string s in op.FileNames)
{
val = s;
values = s.Split('\\');
lastItem = values[values.Length - 1];
newTabItem = new TabItem
{
Header = lastItem,
};
tabControl1.Items.Add(newTabItem);
ReadJsonFile();
DataTable dt = new DataTable();
dt.Columns.Add("Day", typeof(string));
dt.Columns.Add("Date", typeof(string));
dt.Columns.Add("Time", typeof(string));
dt.Columns.Add("Lat", typeof(string));
dt.Columns.Add("Long", typeof(string));
dt.Columns.Add("Address", typeof(string));
dt.Columns.Add("Type", typeof(string));
foreach (var item in data)
{
dt.Rows.Add(item.getDay(), item.getDate(), item.getTime(), item.getLat(), item.getLongi(), item.getAddresst(), item.getTYpe());
}
newTabItem.Content = dt;
}
}
}
public void ReadJsonFile()
{
string json = string.Empty;
using (StreamReader r = new StreamReader(val))
{
json = r.ReadToEnd();
var test = JObject.Parse(json);
JArray items = (JArray)test["locations"];
int length = items.Count;
data = new List<Info>();
for (int i = 0; i < items.Count; i++)
{
var d = test["locations"][i]["timestampMs"];
double dTimeSpan = Convert.ToDouble(d);
DateTime dtReturn = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Math.Round(dTimeSpan / 1000d)).ToLocalTime();
string printDate = dtReturn.DayOfWeek.ToString() + "," + " " + dtReturn.ToShortDateString() + " " + dtReturn.ToShortTimeString();
day = dtReturn.DayOfWeek.ToString();
date = dtReturn.ToShortDateString();
time = dtReturn.ToShortTimeString();
var e = test["locations"][i]["latitudeE7"];
var f = test["locations"][i]["longitudeE7"];
//getLocationByGeoLocation(e.ToString(), f.ToString());
var g = test["locations"][i]["activity"] != null;
if (g == true)
{
JArray items1 = (JArray)test["locations"][i]["activity"];
int length1 = items1.Count;
while (j < items1.Count )
{
if(j == 0)
{
var h = test["locations"][i]["activity"][j]["activity"][j]["type"];
type = h.ToString();
j = 1;
}
else { }
j++;
}
j = 0;
}
else { }
Info ddm = new Info(day, date, time, lat, longi, address, type);
data.Add(ddm);
}
}
return;
}
我希望在绑定了数据网格的tabitem上获得这样的值,但我却变得如此
这是我的xaml文件代码
<DockPanel Height="auto" Width="auto">
<DockPanel Height="auto" Width="auto" DockPanel.Dock="Top" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" LastChildFill="True" >
<TabControl x:Name="tabControl1" Height="auto" Width="auto" ItemsSource="{Binding}" TabStripPlacement="Top" SelectionChanged="tabControl1_SelectionChanged" >
<TabControl.ContentTemplate >
<DataTemplate>
<DataGrid x:Name="dataGrid1" Height="auto" Width="auto" ItemsSource="{Binding}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Width="*" Header="Day" Binding="{Binding}"/>
<DataGridTextColumn Width="*" Header="Date" Binding="{Binding}"/>
<DataGridTextColumn Width="*" Header="Time" Binding="{Binding}"/>
<DataGridTextColumn Width="*" Header="Lat" Binding="{Binding}"/>
<DataGridTextColumn Width="*" Header="Long" Binding="{Binding}"/>
<DataGridTextColumn Width="*" Header="Address" Binding="{Binding}"/>
<DataGridTextColumn Width="*" Header="Type" Binding="{Binding}"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</DockPanel>
</DockPanel>
如何将数据表显示为选项卡项目内容以显示实际值 第一张图片显示了数据表的值,该值我要显示在选项卡上绑定的网格上。
第二张图片是我获得的值,而不是实际值。
答案 0 :(得分:1)
您应该在每列中设置正确的绑定路径。使用{Binding}
会在每个单元格中产生DataRow
,因为{Binding}
意味着整行都应显示在该单元格中,唯一的方法是调用DataRow.ToString()
并显示结果。
您需要在绑定中指定行字段:
<DataGridTextColumn Width="*" Header="Day" Binding="{Binding [Day]}"/>
<DataGridTextColumn Width="*" Header="Date" Binding="{Binding [Date]}"/>
<DataGridTextColumn Width="*" Header="Time" Binding="{Binding [Time]}"/>
<DataGridTextColumn Width="*" Header="Lat" Binding="{Binding [Lat]}"/>
<DataGridTextColumn Width="*" Header="Long" Binding="{Binding [Long]}"/>
<DataGridTextColumn Width="*" Header="Address" Binding="{Binding [Address]}"/>
<DataGridTextColumn Width="*" Header="Type" Binding="{Binding [Type]}"/>