来源:蜘蛛抓取(WebSpider)
时间:2016-06-01 08:30
标签:
大家看年报
我在dataGrid中的一列(“考试成绩”)使用textbox做模板列,这样就可以文本框的形式显示内容并可以编辑,但不知如何将textbox模板列这些
[问题点数:0分]
我在dataGrid中的一列(“考试成绩”)使用textbox做模板列,这样就可以文本框的形式显示内容并可以编辑,但不知如何将textbox模板列这些
[问题点数:0分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。wpf中如何使用datagrid画出一个表格,我在一个框内输入内容,然后调用数据库,数据库中的内容显示在表格_百度知道
wpf中如何使用datagrid画出一个表格,我在一个框内输入内容,然后调用数据库,数据库中的内容显示在表格
&Trigger Property=& AutoGenerateColumns=& Offset=&/Style& Offset=&
<,无非就是把一个记录集通过运算来刷选里面对应页码的记录;
<, RoutedEventArgs e)
int pageNum =&/.Take(number * currentSize);&
&/。所以我们可以用如下代码替换掉<.CellTemplate&<.CellTemplate&int& EndPoint=&
if (pageNum &
&IsSelected&/, 1);姓名&Foreground"!--省略N个代码--& /
public enum Sex { 男;
/重新绑定dataGrid1
/DataGrid Name=&执行插入方法;White&/
&sex&操作&Grid>。跟踪代码会发现后台得到的值还是原来的;
/,职务;&DataGridTemplateColumn&Style&Background&上一页事件
private void btnUp_Click(调用分页方法
4;DataG AutoGenerateColumns="。就是利用到CheckBox控件来完成;/.Parse(DataGridTemplateCS
&;/!--显示状态时显示 TextBlock里的值--&先定义一个常量
const int Num=12;http:Enum}&{Binding Path=性别}&页&
<,编辑完成后执行这个事件就完成更新操作了
/!--省略N个代码-->.Value&Center", RoutedEventArgs e)
foreach (int FID in selectFID)
<.BeginEdit(); Click=&LightPink&//DataTemplate>.CellTemplate>.CanUserAddRows =/,也就是用户必须单击2次才能进行操作;
if (bl == true)
selectFID,怕大家无法理解Binding 后面的值是如何来的了显然这种数据绑定非常的容易;Black", currentsize - 1);();
/ Value=& Binding=&/.Columns&>.Value>,也许不属于样式这类;Setter&
&GradientStop Color=&
int total =1&LightBlue&//:Sex找不到路径
当我们绑定好数据运行程序的时候;
&/Style&&&/ Offset=&CheckBox&&)PS;T&{Binding Source={StaticResource keySex}}&/White&
tbInfo,让你大概知道自己需要的功能是否在这张图里有所实现;
&0".Value&DataGrid FrozenColumnCount=",性别;
& Click=& Width=&True"。里面包含FID;&; Value=".DataGrid的分页实现原理;
<.DataGrid的增改删功能3.AddedCells[0];Grid>: &;/,所以篇幅会很长;Setter&LinearGradientBrush StartPoint=&DataG年龄& infoList = new List&
&DataGridC total)
Binding(Num,和跳转页面的事件了
/; SelectedCellsChanged=& Click=".CellStyle&dataGrid1&/&DataGDataGrid&btnSave&1&LightBlue",但是最基本的设计我们还是要会一些;White&
&0;{Binding 公司名称;/
&DataGridTemplateC&/
&& Binding=&DataGrid>。以绑定代码为基础添加代码&
&/,我们用DataGrid样板标签 DataGridTemplateC&//.com/winfx/2006/xaml" target="_blank">
<,接下来就只要完成删除操作就可以了
删除事件如下
private void btnDelete_Click(Background&GO"。由属性 CanUserAddRows来控制 当 CanUserAddRows=false的时候就不会自动生成新行;/DataGrid&number表示每个页面显示的记录数
currentSize表示当前显示页数
private void Binding(
if (currentCell.Skip(number * (currentSize - 1));
/& Width=&调用分页方法
显示第一页
dataGrid1.Resources& Offset=&/& Click=&0;DataTemplate&;
&&GradientStop Color=&DataGridTextColumn Header=&/点击添加后
将CanUserAddRows重新设置为True,获取上面定义的资源keyS & Name="!--给单个列表头添加颜色开始(以操作列表头为例)-->。
更新记录也是执行该事件
private void dataGrid1_RowEditEnding(
var currentCell = e:T
/1", 1);
Click="。接来下我们再次添加新的代码&
<, Mode=TwoW
<,职员姓名;/
int FID =/ number + 1;
/StackPanel Orientation=&
&&TextBlock Name=&DataGrid>:Key=".Row。显然CheckBox里面还必须绑定值;
这里又会遇到一个问题;&DataGrid&btnDelete_Click&80&
<。所以我们就可以摈弃这种现有的 DataGridComboBoxCTextBlock Text=":local=&&GradientStop Color=&
后台 namespace Demo{
/Setter:其实分页功能的实现大家都清楚;btnSave_Click&&
<.IsC MainW{Binding 性别}&Information>!--给整个表头添加颜色开始--&
<:Type Type=":Type&/1", UpdateSourceTrigger=PropertyChanged}&&False&pageSize表示总页数
if (count % number == 0)
pageSize = count /.com/winfx/2006/xaml/presentation&/
<.Value& Width=".Value& /StackPanel&
&&>.Triggers>.CellEditingTemplate&White&
/.Text);13&Grid>.Count == 0)
lt./。这个也是数据绑定的重点;
<。我们编辑这些控件时;/ EndPoint=&/.Text = currentS
&/。 下图列出了生成的列类型;False"!--Combox绑定; /Grid&/获取该行的记录
if (judge == 1)
/0;Grid>,所以在DataGrid里面设置CanUserAddRows为 /DataG&btnAdd& /13& &
SelectedItem =&公司名称&/ Binding=&
& Name=&Setter Property=&/如果是添加状态就保存该行的值到lstInformation中
这样我们就完成了新行值的获取
lstI/>.Parse(tbxPageN/
&DataGridTemplateC SelectionUnit=& SelectionMode=&/.ColumnHeaderStyle& number,所以就放在一起归纳了)①给DataGrid自动添加行序号+修改行表头颜色后台代码/False&
tbkC//DataGrid Name=&DataG&
&T&GradientStop Color=",这样DataGrid就会自动生成新行;DataGridTemplateColumn.Add(FID).CellStyle>!--这里用到了两种颜色
也可以多层
这样就可以产生一种渐变的效果或立体感--& Offset=&Window_Loaded&, currentsize + 1);
//80& /,女 }; ItemsSource=& selectFID = new List&Cell&FontSize& >.T80&/ 1)
Binding(Num.CellEditingTemplate&DataGridTemplateColumn Header=&下一页".MethodParameters>.AddedC
②给列表头添加颜色 &【当前&0; Width=&/.Columns[3])
/保存&dataGrid1&
& /{Binding 性别}&
infoList = infoL
&DataTemplate>,供上面这些事件调用后台代码//DataGridTextColumn Header=&btnUp&/
AutoGenerateColumns=".DelInformation(FID);&
&后台代码/ MethodName=&
<, Mode=TwoWay,不要写在类里.Parse(tbkCurrentsize,因为你直接可以在DataGrid里面进行编辑;/Style,1&Setter Property=& lstInformation = new List& Binding=",有哪些是被选中的;dataGrid1".RowStyle&
/&Setter Property=&btnSave_Click&/ Width=&Style TargetType=& Foreground=&/。这个问题就是绑定模式的问题;
/Setter Property=&DataGrid&分页方法写好了 接下来就是响应下一页;
xmlns,第二次点击才能获取编辑时的焦点;DataGridTemplateC&
<.Clear(); Width=&&后台现在就差一个 SelectedCellsChanged(选则单元格时出发该事件)事件的后台代码了private void dataGrid1_SelectedCellsChanged(&Button Content=& SelectedItemBinding=&因为完成了添加操作 所以设置DataGrid不能自动生成新行了
Binding(Num.Triggers&/.RDataTemplate&获取到记录后,但我喜欢把改善用户体验归于这一类;DataGrid&
&{Binding Source={StaticResource keySex}}",职务
&True".CellTemplate&&;DataGridTextColumn Header=", RoutedEventArgs e)
judge = 1;
&& Offset=&保存选中要删除行的FID值
private void CheckBox_Click(object sender, int currentSize)
List&ObjectDataProvider&>.Text);Red&Setter Property=&/,但对于其它控件;
&Background&TextBlock Text=".LoadingRow += new EventHandler&/:Name=&LinearGradientBrush&>, UpdateSourceTrigger=PropertyChanged}&clr-
<, RoutedEventArgs e)
foreach (Information info in lstInformation)
tbInfo.RowHeaderStyle&tbkCurrentsize&>.RDataGridCell&/。所以我们要做的就是单击第一次的时候用户就可以编辑ComboB&Extended&
进入编辑模式
这样单击一次就可以选择ComboBox里面的值了
⑥固定列表头这个非常简单 只要在DataGrid里添加一个属性即可&
<,我们只需要如下几行代码&0&GetValues&&sex&
xmlns=&int&
/>, DataGridRowEventArgs e)
ObjectDataProvider。上面引用了命名空间Demo--&DataGridRowEventArgs&dataGrid1&/TextBlock Text=&/删除", UpdateSourceTrigger=PropertyChanged}&>,并且还需要一个事件;Setter Property=&
<。给CheckBox添加的代码如下& /注意 写在命名空间内 ;
&dataGrid1&1;DataGrid Name=&
/:因为这里给dataGrid1绑定了数据源,行失去焦点激发该事件。我们在DataGridTemplateColumn标签里要用到2个控件;;Setter Property=&&15&页】&VisibleWhenSelected&False",1"。PS;
<.Remove(FID);
pageSize = count /,职员姓名;
<.Value>, 1)。(有些需要用到后台代码;/
<.Text);Style&
首先我们先写个分页的方法;:Sex&DataGridRow&
///&Background&获取当前页数
if (currentsize &ObjectDataP保存", UpdateSourceTrigger=PropertyChanged}&GradientStop Color=& &/。所以接下来做的工作主要就是给DataGrid上色了.数据绑定(涉及DataGrid绑定和Combox绑定)在DataGrid 中同时包含“自动生成列”与“用户自定义列” 由属性AutoGenerateColumns控制;;Style&
/LinearGradientBrush StartPoint=&(dataGrid_LoadingRow);我自己的数据表实例类
&dataGrid1&/
&/。这种机制其实是适合文本框控件的;DataGridTemplateColumn&/!--当鼠标经过时 改变颜色-->。接下来贴出代码(后面的所有功能都可以在此代码基础上添加和修改)& RowEditEnding=&S公司名称&Grid&如果选中就保存FID
selectFID;{Binding Path=性别}&//DataGrid
Name=",作用是删除记录后重新给DataGrid赋新的数据源
& btnAdd_Click&TextBlock Height=".Text = pageS&{Binding 职员姓名;
Title=&现在为添加状态
dataGrid1;&
<://LinearGradientBrush&&>!--给整个表头添加颜色结束--&DataGrid Name=&
&/,为字段‘性别’提供数据源;
&ObjectDataP/LinearGradientBrush StartPoint=&//dataGrid1& CanUserAddRows=&
&/ Text=&summary&Style TargetType=&btnNext_Click&/ EndPoint=&TextBlock Text=&Setter Property=".DataGrid的增改删功能①添加记录行+编辑记录行由于增加和编辑有一定的联系;&False&Setter!--编辑状态就切换到ComboBox里进行下拉选择操作--& Value=&
&&&= 1 && pageNum <,公司名称;W
/,上一页;//.ItemsSource = infoL重新回到编辑状态
lstI0,年龄,像ComboBox就显得很不方便了;/调用分页方法
/自动添加序号的事件
调用下面的dataGrid_LoadingRow
public void dataGrid_LoadingRow(/Window.C/
&Setter Property=":使用技术;/GradientStop Color=&tbxPageNum&
dataGrid1;
&DataGrid Name="。如果AutoGenerateColumns="。解释下;btnSave".Columns&
VerticalAlignment=& /Yellow&/.xaml 的交互逻辑
//Style TargetType=&TextBlock Text=&/、SelectionMode 和 SelectionUnit)和一个新的事件处理程序 (SelectedCellsChanged)前台&//DataTemplate&/True&Button Name=& //Button Content=&Information>,0&DataGridRowHeader"。接下来我要在DataGrid添加了三个新属性(RowDetailsVisibilityMode.ColumnHeaderStyle&
<.DataGrid的样式设计为什么用WPF,但是他不会默认显示出已经设定好的值,DataGrid默认是输入一行记录后自动会生成一个新行(类似MSSQL数据库添加表记录);LinearGradientBrush>.Columns&Button Content=&这个是我绑定的一个方法,公司名称;
&/后台dataGrid1; Offset=&CheckBox&
xmlns.ItemsSource = infoLDataG/S/添加&窗体加载事件
private void Window_Loaded(object sender.ToString(), Mode=TwoW5&循环遍历删除里面的记录
/False&20".Parse(tbkT /:Demo&获取该行的FID
/转到& Binding=&
<,首先第一次单击获取单元格焦点;x:SDataGrid&
/{Binding 公司名称;表示每页显示12条记录
/Background&DataGrid,将记录保存到数据库
judge = 0;
&/页】&TextBlock Text=&Button Name=&Button Content=&
&&/ Foreground=&
&CheckBox &
& Tag=&/TextBlock Text=".Add(info);dataGrid1&/
&btnAdd",但总归是改变外观, UpdateSourceTrigger=PropertyChanged}":assembly=",我们接下来要做的就是获取这些新添加的记录
&DataG如果是编辑状态就执行更新操作
更新操作最简单;/
/DataGridTextColumn Header=",无法获取编辑后的值.MainWindow& ItemsSource=& AutoGenerateColumns=&
&<a href="TextBox Name=&& ObjectType=".InsInformation(info); /IsMouseOver&80&DataGridComboBoxColumn Header=&
④给单元格添加颜色 &DataTemplate&/ Value=&
/.UpdInformation(info);Setter Property=&btnDelete".HeaderStyle>,因为实际应用中我们大多都是自定义去完成DataGrid的数据绑定;
CanUserAddRows=&Center&DataGrid Name=&;
& AutoGenerateColumns=&DataG我们通过 RowEditEnding来获取新增的记录。当我们的表格里有类似ComboBox的控件时(如;FontSize&
<.Triggers&
&/:x=",不就是因为WPF拥有绚丽的设计页面功能么(当然远不止这些);
/dataGrid1&刷选第currentSize页要显示的记录集
dataGrid1;&/如果选中取消就删除里面的FID
/.com/winfx/2006/xaml&
IsSynchronizedWithCurrentItem="。默认情况下;80", UpdateSourceTrigger=PropertyChanged问题就解决了例如,性别;首先我们要获取CheckBox中的值;
VerticalAlignment=&这个类可以供我调用里面的方法来进行增删改查的操作
private void btnAdd_Click(
& Name=&SkyBlue&
⑤ 让用户在单元格获得焦点时编辑 ComboBox其实这不属于样式的范畴了, SelectedCellsChangedEventArgs e)
if (e,所以下面绑定的字段都是infoList中的字段名称;{Binding 年龄;();& >,另一个ComBox来提供选择.&= total)
Binding(Num!--此时的DataGrid就无法自己生成新行了-->, DataGridRowEditEndingEventArgs e)
Information info = new Information(); Offset=&
DataTemplate& Content="。因为后面的增加和编辑都在同一个事件中;
&Grid&S/CheckBox_Click&0;W调用分页方法
/ ItemsSource=&&/ /btnAdd_Click&/.绑定性别--&/Columns[]从0开始
我这的ComboBox在第四列
dataGrid1;/summary&DataG
&//&Background&
③给行添加颜色+滑鼠事件&DataGridColumnHeader&/ Click=&/>.CanUserAddRows =DataGridTextColumn Header=&
<,单击保存按钮就可以保存lstInformation中的每一条记录
private void btnSave_Click(
&/Style TargetType=&&Trigger&
&infoList为内容集合(这是我从数据库中获取的记录集合 类型为List&
& Value=&Setter>,会发现 DataGridComboBoxColumn下拉框里虽然绑定了值;&Red&
&获取记录总数
int pageSize = 0;
<。且作用对象是在属性值更改的情况下进行双向绑定;/ //
&btnGo_Click&False& SelectedItemBinding=&/.5&跳转事件
private void btnGo_Click(/
<.Parse(tbkCurrentsize.Information& /&0",如果对表格要求不高;/btnUp_Click&/:WPF + ADO;
&Width"。
/, RoutedEventArgs e)
CheckBox dg = sender as CheckBassembly=mscorlib&
/。虽然我美工这方面很差劲;/://schemas.Header =总页数
int currentsize =
&<, RoutedEventArgs e)
int currentsize = int,1&&
&;{Binding Source={StaticResource keySex}}", Mode=TwoWay.Resources&现在我们可以添加新记录了;
&DataGridTemplateC职务&
<,我就做了个可以批量删除的删除功能;Trigger&keySex&&/DataGridTemplateColumn Header=&/DataGrid Name="://
<.Column == dataGrid1;/
<。为了方便我们自己来控制;;True&GradientStop Color=&Foreground& /
Click=&DataG/.ToList();
这里的Information是我的数据表实体类
里面包含FID ;&/taskCombo"!--省略N个代码--&
infoList = tbInfo, RoutedEventArgs e)
int total =Button Content=&&
<!--省略N个代码--&/Information&
&,0&Horizontal& Value=&TextBlock&操作":// RowDetailsVisibilityMode=& Value=&//
&CSDN_C;Width&Foreground&
/.Text);/ 表格字段的显示就要靠我们手动去完成了;/.MethodParameters&
/SkyBlue&当前页数
if (currentsize &&&已经获取到里面的值了;②删除记录为了有良好的用户体验;,就是每次编辑完行后: DatePicker 控件等);&Grid&/。 只要在前面的每个表字段处加上 Mode=TwoWTrigger Property=&S
<.microsoft.Text);&&先声明一个存储新建记录集的List&下一页事件
private void btnNext_Click(object sender.ToString();
/& /由于涉及的应用比较多;/GradientStop Color=& Value=&DataGridComboBoxColumn Header=& / Value=":Class=&CheckBox Click=&
& Click=&DataGridColumn.GetIndex() + 1;
<!--从1开始 1表示第一列 这里如果要固定我的操作列就设置为1--&/Setter Property=&/!--给单个列表头添加颜色结束--& Content=&/.
<。如果AutoGenerateColumns=&/
&&btnNext".GetInformationList();
&40&40&【共"。那就是更新数据的时候;&//.Item as I{Binding 职务;White&dataGrid1_SelectedCellsChanged&dataGrid1_RowEditEnding".数据绑定2;Binding(NDataGrid Name="!--省略N个代码--&Window>.Triggers>,所以就放一起来讨论在上面的代码处添加2个Button按钮;
后台事件 int judge = 0;
<,否则台前
&上一页&{Binding FID}"!--单元格被选中时 改变颜色--&<,同样也对应着我数据表中的字段名;&
&获取数据源
int count = infoL Value=&/,总共4个部分1;Style TargetType=",1为添加状态;
<,一个 TextBlock控件来显示内容;0表示编辑状态;&DataGridTemplateColumn&
注意 CellTemplate和 CellEditingTemplate的区别2;Style,所以建一个变量来区分操作
TB_Information
tbInfo = new TB_Information();
& & Width=&
//!--引用后台的枚举类型;
/Setter Property=",发现数据更本就没更新;Black& / Value=", DataGrid 将根据数据源自动生成列;/ Value=&添加&由ChecBox的Click事件来记录被选中行的FID
List&/.RowStyle&TextBlock Name=&&clr-namespace,我们就能在新行中输入数据了;<,我们只需设置双向绑定就可以了;>, Mode=TwoWay.HeaderStyle>.Parse(tbkTotal.RowHeaderStyle& Margin=&White&性别&MainWindow&>.DataGrid的分页实现4,年龄;DataGridColumnHeader&
&0;设置行表头的内容值
接下来就可以修改行表头的颜色了 &Setter Property=&DataGridTemplateColumn Header=&tbkTotal",这中无疑是最简单方便的.DataGrid的样式设计先上一张截图, pageNum);DataTemplate&x;
/Button Content=& /.Columns>.ToString());
<.NET Entity Framework1。但可以确保各个版块相互独立;DataGrid& ;{x
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁用一个datagrid控件显示数据库中的某门课的学生,想在显示出来的数据后面添加每个人的成绩,但一修改就弹_百度知道
用一个datagrid控件显示数据库中的某门课的学生,想在显示出来的数据后面添加每个人的成绩,但一修改就弹
姓名用一个datagrid控件显示数据库中的某门课的学生学号,直接在datagrid里修改就弹出缺少更新或刷新键列信息、成绩,想在显示出来的数据后面添加每个人的成绩
commandtype = 2 ② 如果是sql语句 commandtype=1datagrid的datasource 选择为adodc1Adodc1.AddNew Adodc1首先数据库表中是否存在 “成绩”那列在adodc1中配置数据库连接,①如果是单表取数据.Recordset.Recordset
好像没用到adodc1
dataGrid控件的话不好控制最好结合Adodc1使用dataGrid是用于简单报表的
来自团队:
其他类似问题
为您推荐:
datagrid控件的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁