WPF中DataGrid控件的数据绑定与显示数组
2011-01-28 11:17
399 查看
<DataGrid x:Name="DataGrid" AutoGenerateColumns="False" Visibility="Visible" IsReadOnly="False" VerticalAlignment="Top" Height="307" Canvas.Left="208" Canvas.Top="15" Width="280">
<DataGrid.Columns>
<DataGridTextColumn Header="星期一" Binding="{Binding 星期一}" Width="100"/>
<DataGridTextColumn Header="星期二" Binding="{Binding 星期二}" Width="70"/>
<DataGridTextColumn Header="星期三" Binding="{Binding 星期三}"/>
<DataGridTextColumn Header="星期四" Binding="{Binding 星期四}"/>
<DataGridTextColumn Header="星期五" Binding="{Binding 星期五}"/>
<DataGridTextColumn Header="星期六" Binding="{Binding 星期六}"/>
<DataGridTextColumn Header="星期天" Binding="{Binding 星期天}"/>
</DataGrid.Columns>
</DataGrid>
AutoGenerateColumns="False"这个很重要,曾在这个问题上绕很长时间,如果该属性为true既允许插入列标题那结果会是在原来的列后面在加同样的一列。
上面是使用的 <DataGridTextColumn/>给DataGrid添加的固定列标题名,这里注意后面的 Header="星期一" Binding="{Binding 星期一} 其中Binding{}就是关键的数据绑定的那块,这里在{}里的内容就是我们要在C#中定义的结构体或其他的成员名,两者必须一致。下面贴一下 定义的结构体共2个:
public struct ProgramStruct
{
[MarshalAs (UnmanagedType.ByValArray, SizeConst=50)] public char[] name; //c char[]
public int NumberOf; //c int
public uint Fre; //c unsigned long
public ushort ser; //c unsigned short
public byte sta; //c unsigned char
public char nt; //c char
public byte dem; //c unsigned char
public ushort Servi;
[MarshalAs (UnmanagedType.ByValArray, SizeConst=200)] public char[] net; //c char[]重点在C#里的指定大小的数组定义
public int mf; //c int
public int Bandwid; //c int
public bool bChe; //c bool
}
上面这个是咱们调用dll里的接口需要的参数结构定义。
public struct ProgramStruct2
{
public string 星期一{get;set;}
public string 星期二{get;set;}
public ushort 星期三{get;set;}
public uint 星期四{get;set;}
public byte 星期五{get;set;}
public int 星期六{get;set;}
public int 星期天{get;set;}
}
这里注意那个{get;set;}也是获取值的关键。
下面就是根据咱们使用的数组大小定义上面结构体的数组了以及取值。
int count = ImportInterface.GetProgramCount();//调用DLL库里获取文件的个数的接口
int size = Marshal.SizeOf(typeof(ImportInterface.ProgramStruct)) * count;
IntPtr pBuff = Marshal.AllocHGlobal(size);
ImportInterface.GetProgramList(pBuff); //调用库获取文件(其中库统一放在ImportInterface.cs里)
List<ProgramStruct2> service = new List<ProgramStruct2>();
ImportInterface.ProgramStruct[] pClass = new ImportInterface.ProgramStruct[count];
ProgramStruct2 ps = new ProgramStruct2();
for (int i = 0; i < count; i++)
{
IntPtr pPonitor = (IntPtr)(pBuff.ToInt32() + Marshal.SizeOf(typeof(ImportInterface.ProgramStruct)) * i);
pClass[i] = (ImportInterface.ProgramStruct)Marshal.PtrToStructure(pPonitor, typeof(ImportInterface.ProgramStruct));
ps.星期一 = new string(pClass[i].net);
ps.星期二 = new string(pClass[i].name);
ps.星期三 = pClass[i].servi;
ps.星期四 = pClass[i].Fre;
ps.星期五 = pClass[i].sta;
ps.星期六 = (int)pClass[i].nt;
ps.星期天 = pClass[i].mf;
service.Add(ps);//关键
}
Marshal.FreeHGlobal(pBuff);
DataGrid.ItemsSource = service;//关键_这里的DataGrid是DataGrid的ID
列一下ImportInterface.cs的库的引入:
[DllImport("LOVI.dll")]
public static extern int GetProgramCount( );
3
4 [DllImport("LOVI.dll", CharSet = CharSet.Ansi)]
5 public static extern void GetProgramList(IntPtr ps);//ProgramStruct *ps
引入库dll要加头文件 using System.Runtime.InteropServices;
搞定,其中的有关结构体的成员的名字由于是实际项目所以对其中的命名有所改动!!!
<DataGrid.Columns>
<DataGridTextColumn Header="星期一" Binding="{Binding 星期一}" Width="100"/>
<DataGridTextColumn Header="星期二" Binding="{Binding 星期二}" Width="70"/>
<DataGridTextColumn Header="星期三" Binding="{Binding 星期三}"/>
<DataGridTextColumn Header="星期四" Binding="{Binding 星期四}"/>
<DataGridTextColumn Header="星期五" Binding="{Binding 星期五}"/>
<DataGridTextColumn Header="星期六" Binding="{Binding 星期六}"/>
<DataGridTextColumn Header="星期天" Binding="{Binding 星期天}"/>
</DataGrid.Columns>
</DataGrid>
AutoGenerateColumns="False"这个很重要,曾在这个问题上绕很长时间,如果该属性为true既允许插入列标题那结果会是在原来的列后面在加同样的一列。
上面是使用的 <DataGridTextColumn/>给DataGrid添加的固定列标题名,这里注意后面的 Header="星期一" Binding="{Binding 星期一} 其中Binding{}就是关键的数据绑定的那块,这里在{}里的内容就是我们要在C#中定义的结构体或其他的成员名,两者必须一致。下面贴一下 定义的结构体共2个:
public struct ProgramStruct
{
[MarshalAs (UnmanagedType.ByValArray, SizeConst=50)] public char[] name; //c char[]
public int NumberOf; //c int
public uint Fre; //c unsigned long
public ushort ser; //c unsigned short
public byte sta; //c unsigned char
public char nt; //c char
public byte dem; //c unsigned char
public ushort Servi;
[MarshalAs (UnmanagedType.ByValArray, SizeConst=200)] public char[] net; //c char[]重点在C#里的指定大小的数组定义
public int mf; //c int
public int Bandwid; //c int
public bool bChe; //c bool
}
上面这个是咱们调用dll里的接口需要的参数结构定义。
public struct ProgramStruct2
{
public string 星期一{get;set;}
public string 星期二{get;set;}
public ushort 星期三{get;set;}
public uint 星期四{get;set;}
public byte 星期五{get;set;}
public int 星期六{get;set;}
public int 星期天{get;set;}
}
这里注意那个{get;set;}也是获取值的关键。
下面就是根据咱们使用的数组大小定义上面结构体的数组了以及取值。
int count = ImportInterface.GetProgramCount();//调用DLL库里获取文件的个数的接口
int size = Marshal.SizeOf(typeof(ImportInterface.ProgramStruct)) * count;
IntPtr pBuff = Marshal.AllocHGlobal(size);
ImportInterface.GetProgramList(pBuff); //调用库获取文件(其中库统一放在ImportInterface.cs里)
List<ProgramStruct2> service = new List<ProgramStruct2>();
ImportInterface.ProgramStruct[] pClass = new ImportInterface.ProgramStruct[count];
ProgramStruct2 ps = new ProgramStruct2();
for (int i = 0; i < count; i++)
{
IntPtr pPonitor = (IntPtr)(pBuff.ToInt32() + Marshal.SizeOf(typeof(ImportInterface.ProgramStruct)) * i);
pClass[i] = (ImportInterface.ProgramStruct)Marshal.PtrToStructure(pPonitor, typeof(ImportInterface.ProgramStruct));
ps.星期一 = new string(pClass[i].net);
ps.星期二 = new string(pClass[i].name);
ps.星期三 = pClass[i].servi;
ps.星期四 = pClass[i].Fre;
ps.星期五 = pClass[i].sta;
ps.星期六 = (int)pClass[i].nt;
ps.星期天 = pClass[i].mf;
service.Add(ps);//关键
}
Marshal.FreeHGlobal(pBuff);
DataGrid.ItemsSource = service;//关键_这里的DataGrid是DataGrid的ID
列一下ImportInterface.cs的库的引入:
[DllImport("LOVI.dll")]
public static extern int GetProgramCount( );
3
4 [DllImport("LOVI.dll", CharSet = CharSet.Ansi)]
5 public static extern void GetProgramList(IntPtr ps);//ProgramStruct *ps
引入库dll要加头文件 using System.Runtime.InteropServices;
搞定,其中的有关结构体的成员的名字由于是实际项目所以对其中的命名有所改动!!!
相关文章推荐
- wpf数据绑定——radiobutton绑定枚举值并显示枚举值
- WPF中在listview进行数据绑定,根据绑定数据调整一列的显示
- ioni3 http请求数据绑定时数组嵌套的显示问题
- 使用数据绑定和 WPF 自定义数据显示
- ioni3 http请求数据绑定时数组嵌套的显示问题
- 使用数据绑定和 WPF 自定义数据显示
- WPF4数据绑定应用之“创建具有多种显示效果的字串”
- WPF提取oracle数据库中数据显示到DataGrid控件上
- NPOI导出WPF DataGrid控件显示数据
- 基于WPF数据绑定的鼠标随动显示光标位置的方法
- NPOI导出WPF DataGrid控件显示数据
- WPF 中DataGrid控件绑定数据的一个例子
- WPF中ListView绑定数据源后居中显示
- android 数组数据绑定到listview
- 利用DataGrid控件显示主-从关系数据表
- ajax 动态绑定数组数据到select上
- 工作总结 @Html.EditorFor @Html.TextBoxFor 表达式树 绑定显示日期格式数据
- C#_wpf_userinput_数据绑定_后台对象改变,界面数据也变化
- Silverlight DataGrid 数据绑定鼠标移入到内容项时显示类似ToolTip提示文本
- WPF,Silverlight与XAML读书笔记第十八 - 数据绑定