gridview的数据在你绑定数据的时候从数据库读取一次,然后他和数据库就没关系了。修改gridview里的值并不会引发数据库的修改,你刷新页面,他会重新绑定一次,当然数据又变成原来的啦。如果你想在修改gridview的数据时在数据库更新对应的项,那你要另写代码才可以。
主要控件有 datagridview checkbox picturebox trackBar1 label
_atagridview :实时显示数据
_heckbox :指示是否停止更新
_icturebox :显示更新状态
_rackBar1 :设置更新时间频率
_abel :显示一些相关信息
_
1 using System;
2 using SystemCollectionsGeneric;
3 using SystemComponentModel;
4 using SystemData;
5 using SystemDrawing;
6 using SystemText;
7 using SystemWindowsForms;
8 using SystemThreading;
9
10 namespace WinMilkProjectProject
11 {
12
13 public partial class Form1 : Form
14 {
15 Thread myThread;
16 OperateCB operatedb = new OperateCB();
17 public int frequency = 0;//更新时间频率
18 public static bool isUse = false;//是否停止更新
19 public static string statusInfo = stringEmpty;//状态
20 private delegate void myDelegate(DataTable dt);//定义委托
21 public Form1()
22 {
23 InitializeComponent();
24 label2Text = "更新频率为:" + (trackBar1Value / 1000)ToString() + "秒";
25 }
26
27 private void Form1_Load(object sender, EventArgs e)
28 {
29 myThread = new Thread(startFillDv);//实例化线程
30 myThreadStart();
31
32 }
33
34 private void startFillDv()
35 {
36 while (true)
37 {
38 if (isUse)
39 {
40 statusInfo = "正在实时更新数据";
41 DataTable dt = operatedbMyDataTable("select from test1");//把自己写的数据封装类OperaterCB 能够返回一个datatable
42 Grid(dt);
43 ThreadSleep(frequency);
44 }
45 else
46 {
47 statusInfo = "停止更新!";
48 }
49 }
50
51 }
52
53 private void Grid(DataTable dt)
54 {
55 if (thisInvokeRequired)
56 {
57 thisInvoke(new myDelegate(Grid), new object[] { dt });
58 }
59 else
60 {
61 try
62 {
63 thisdataGridView1DataSource = null;
64 thisdataGridView1DataSource = dt;
65 dt = null;
66 statusInfo = "更新完成!";
67 }
68 catch
69 {
70
71 }
72 }
73
74 }
75
76 private void Form1_FormClosed(object sender, FormClosedEventArgs e)
77 {
78 if (thismyThreadIsAlive)
79 {
80 thismyThreadAbort();//结束线程
81 }
82 }
83
84 private void timer1_Tick(object sender, EventArgs e)
85 {
86 label1Text = statusInfo;
87 frequency = trackBar1Value;
88 if (statusInfoTrim() == "正在实时更新数据")
89 {
90 pictureBox1Visible = true;
91 }
92 else
93 {
94 pictureBox1Visible = false;
95 }
96
97 }
98
99 private void checkBox1_CheckedChanged(object sender, EventArgs e)
100 {
101 if (checkBox1Checked)
102 {
103 isUse = true;
104 }
105 else
106 {
107 isUse = false;
108 }
109
110 }
111
112 private void trackBar1_Scroll(object sender, EventArgs e)
113 {
114 label2Text = "更新频率为:" + (trackBar1Value / 1000)ToString() + "秒";
115 }
116
117 }
118 }
_
更新需要两个条件,一是更新的内容是什么,二是更新哪一行数据,在这里,哪一行数据我们在删除的时候就已经确定下了,就是鼠标所点的那一行,而更新的内容却不知道,所以这里要先做这一步:回到设计页面,点击小三角,编辑列,在选定的字段中,把年龄,分数分别点击将此字段转换为TemplateField;;做完这一步,年龄与分数的文本框就出来了,分别为TextBox1和TextBox2;
这个时候当你点击更新时候,也会报错,提示GridView“GV”激发了未处理的事件“RowUpdating”;这时你就要到事件列表,找到RowUpdating事件,在其后面的表格中双击进入后台写出以下代码:
protected void GV_RowUpdating(object sender, GridViewUpdateEventArgs e)2 {
3 int ab = ConvertToInt32(GVDataKeys[eRowIndex]Value);
4 string nl = ((TextBox)GVRows[eRowIndex]FindControl("TextBox1"))Text;//把鼠标所点的那一行的文本框的值给取出来
5 string fs = ((TextBox)GVRows[eRowIndex]FindControl("TextBox2"))Text;
6 SqlConnection cnn = new SqlConnection("Server=(local);uid=sa;pwd=0;database=学生");
7 string SQL = "update xs set 年龄='"+nl+"',分数='"+fs+"' where id="+ab;
8 SqlCommand cmd = new SqlCommand(SQL,cnn);
9 cnnOpen();
10 cmdExecuteNonQuery();
11 cnnClose();
12 //这下面两句就是代表,当你点击更新以后,它就会回到初始状态,就相当于再点击更新的同时,又点了一次取消按钮;然后再重新加载一次。
13 GVEditIndex = -1;
14 abc();
15 }
至此更新按钮就写好了,不过还要说一点,可能当你每次点击按钮的时候,整个页面都会重新加载一下,所以为了防止此现象,我们要给个整个页面加上一个回调命令,代码如下:
1 protected void Page_Load(object sender, EventArgs e)2 {
3 if (IsPostBack)//当触发回调(点击按钮或下拉菜单或其它事件)时则停止运行abc();
4 return;
5 abc();
6 }
想直接在Gridview中编辑就要在Gridview中添加文本框,将数据库中的值绑定到文本框中,然后选择文本框自动回发(ispostback),并将数据库更新代码写入文本框双击事件中,最后重新绑定gridview实现刷新即可!
写一个读取的方法 Get() 加到
if (rowcount > 0)
{
MessageBoxShow("添加成功");
(thisFamilyFinaceDataSetConsume);
Get();每次添加成功后又读取一次数据 刷新内容
}
以上就是关于我更新了GridView里面的数据,为什么我刷新页面还是显示的以前的内容,数据库的内容也没变全部的内容,包括:我更新了GridView里面的数据,为什么我刷新页面还是显示的以前的内容,数据库的内容也没变、mfc datagrid怎么实时更新数据库内容、GridView控件如何即时更新等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)