如何刷新c#中的表单?

时间:2011-02-13 11:55:21

标签: c# winforms visual-studio

我已经构建了一个可以向SQL数据库添加/删除记录的表单。当我添加一条记录时,我希望表单重新加载,并且包含所有记录的列表框现在包括新添加的记录。

我用谷歌搜索了一下,看到一个新线程被推荐刷新表格,但说明书对于像我这样的新手来说还不够清楚。

任何帮助都将不胜感激。

提前致谢。

编辑:这是一个使用c#的桌面应用,而不是asp。

某些控件由我运行的向导填充,而其他控件则由我自己编写数据源。

namespace LomWindows
{
    public partial class Form1 : Form
    {
        SqlConnection myConnection;

        public Form1()
        {
            InitializeComponent();
            myConnection = new SqlConnection(global::LomWindows.Properties.Settings.Default.esConnectionString);
            tConnStr.Text = global::LomWindows.Properties.Settings.Default.esConnectionString;

            try
            {
                myConnection.Open();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string sqlComm = "INSERT INTO ES_TOOL ....";

            try
            {
                myCommand.ExecuteNonQuery();
            }
            catch (Exception exce)
            {
                Console.WriteLine(exce.ToString());
            }

            try
            {
                myConnection.Close();
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.ToString());
            }

            InitializeComponent();
            MessageBox.Show("Tool Added");
            this.Invalidate();
        }
    }
}

7 个答案:

答案 0 :(得分:2)

您可以在添加/编辑/删除后再次重新绑定控件,这将使用更新的数据重新加载控件。

答案 1 :(得分:1)

<强>的WinForms

MSDN上有一篇很棒的文章,内容如下:Give Your .NET-based Application a Fast and Responsive UI with Multiple Threads

如果要重新绘制窗口,可以调用方法Invalidate。但是,当您重新绑定控件时;设置一个新的数据源,它将更新其中的内容。

以下是一些值得观看WinForms的精彩视频:"How Do I Videos" from WindowsClient.net

<强> WPF

以下是与WinForms中的文章相匹配的文章:Build More Responsive Apps With The Dispatcher

Herer是一些很棒的视频,可以观看WPF:"How Do I Videos",来自WindowsClient.net。

<强> ASP.NET

如果您想创建更具响应性的webbapp,可能需要考虑查看jQuery和Ajax。然后,您可以请求网站的新部分并替换旧网站。

但是,如果您只是在进行回发并且想要将项目添加到列表框中,则只需在DataBind上调用ListBox即可重新绑定数据源中的项目

答案 2 :(得分:1)

基本问题并不是关于Winforms重绘,而是如何刷新Winform控件绑定的数据源,或者在数据库被您的数据库更改之后,以非绑定模式手动填充控件的方式。客户申请。

除非您创建数据模型,否则当某个命令执行DML语句时,您的数据源对象无法知道数据已被更改。这一切都必须“捆绑在一起”。 ADO.NET使用“断开连接的记录集”模型。 ADO.NET数据层对象将引发与数据i / o和数据错误相关的事件,您必须将侦听器/事件处理程序附加到它们;反过来,这些事件处理程序必须调用您的表示层代码。

目前你只是用命令对象抓住表面。最好的办法是阅读其中一本书,向您展示如何将事件处理程序连接到ADO.NET事件模型。

编辑:这是一个帮助您入门的链接:http://msdn.microsoft.com/en-us/library/w9y9a401.aspx

答案 3 :(得分:0)

如果是ASP.NET,您可以通过使用以下代码将表单重定向到自身来刷新表单:

Response.Redirect(Request.RawRul);

如果是Windows应用程序,则需要通过再次设置其DataSource属性来重新绑定列表框控件。

答案 4 :(得分:0)

如果您已在ListBox上调用Invalidate,则可能需要向Paint方法添加调试语句以确保它真正重新绘制。如果是,那么您应该查看Paint获取绘制项目所需状态的位置。您在Paint内查询数据库吗? (我希望不是。)或者是形式在某个地方保持其状态?在这种情况下,您应确保保持内存状态与数据库一致。

答案 5 :(得分:0)

您是否考虑过在添加/删除/更新一个行时重新加载所有行的性能影响?恕我直言,重新加载整个数据只会惹恼用户,也会增加带宽使用量。而是为每行数据创建POCO对象。每当有(成功的)CRUD操作(您在BackgroundWorker组件上执行)时,只需将其添加到DataSource并致电DataBind

有关如何使用BackgroundWorker的详细信息,请参阅this

答案 6 :(得分:0)

在Form_Load中写入选择查询,然后在需要刷新表单的地方调用,

form_load(Object sender,Event_args e)
  {

   select Query to display on Loading form
  }
add_click(Object sender,Event_args e)
 {
 form_load(sender,e);
 }