我更新了GridView里面的数据,为什么我刷新页面还是显示的以前的内容,数据库的内容也没变

我更新了GridView里面的数据,为什么我刷新页面还是显示的以前的内容,数据库的内容也没变,第1张

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控件如何即时更新等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10198434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存