我已经构建了一个可以向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();
}
}
}
答案 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);
}