专栏首页程序你好C#代码示例:在WinForm中创建并绑定一个DataTable

C#代码示例:在WinForm中创建并绑定一个DataTable

在我的一篇文章中,我解释了如何在没有数据库的情况下以web形式绑定gridview。这里,我将解释如何在没有数据库的windows窗体中绑定datagrid。

当我们使用windows窗体或web窗体时,这个需求非常有用。我的要求很简单。当我们输入所有字段并单击Book按钮时。它将暂时将数据绑定到如下所示的数据网格。我已经展示了下面的截图:

我们来看看怎么做,以下是实现步骤。

1、创建一个数据表。

2、通过需要数据类型来创建列名column或标题。

3、将此列column添加到datatable

4、创建一个包含输入控件所有值的行。

5、将datatable绑定到Datagrid。

在做这个之前,我们需要先添加一个命名空间。

using System.Data;

Step 1: 创建数据表

DataTable dt = new DataTable();

Step 2: 创建数据列

DataColumn dc1 = new DataColumn("PERSONAL NO", typeof(int));    
DataColumn dc2 = new DataColumn("NAME", typeof(string));    
DataColumn dc3 = new DataColumn("DATE", typeof(string));    
DataColumn dc4 = new DataColumn("QUANTITY", typeof(int));    
DataColumn dc5 = new DataColumn("TYPE", typeof(string));

Step 3: 添加这些列Columns 到 DataTable,

dt.Columns.Add(dc1);    
dt.Columns.Add(dc2);    
dt.Columns.Add(dc3);    
dt.Columns.Add(dc4);    
dt.Columns.Add(dc5);

Step 4: 创建一个行对象

dt.Rows.Add(txt_personalNo.Text,txt_name.Text,txt_date.Text,Convert.ToInt32(txt_quantity.Text),cmb_type.SelectedItem.ToString());

Step 5: 数据绑定datatable 到 datagrid:

dataGridView1.DataSource = dt;

这些就是完整代码,很简单,还需要把这些代码添加到一个方法里,并在按钮单击时调用该方法。

public void createnewrow()  
{  
    DataTable dt = new DataTable();  
    DataColumn dc1 = new DataColumn("PERSONAL NO", typeof(int));  
    DataColumn dc2 = new DataColumn("NAME", typeof(string));  
    DataColumn dc3 = new DataColumn("DATE", typeof(string));  
    DataColumn dc4 = new DataColumn("QUANTITY", typeof(int));  
    DataColumn dc5 = new DataColumn("TYPE", typeof(string));  
    dt.Columns.Add(dc1);  
    dt.Columns.Add(dc2);  
    dt.Columns.Add(dc3);  
    dt.Columns.Add(dc4);  
    dt.Columns.Add(dc5);  
    dt.Rows.Add(txt_personalNo.Text, txt_name.Text, txt_date.Text, Convert.ToInt32(txt_quantity.Text), cmb_type.SelectedItem.ToString());  
    dataGridView1.DataSource = dt;  
}
private void btn_book_Click(object sender, EventArgs e)  
{  
createnewrow();  
}

现在在Book按钮上调用这个方法。

这样,我们就可以在windows窗体应用程序中绑定一个没有数据库的datagrid。

对于维护这个datagrid的状态,现在用户面临的问题是什么。

在输入第一次预订的详细信息后,当我进行第二次预订时,第一次预订的详细信息将会丢失,因此为了防止这种情况发生,您必须稍微修改一下代码。在这里,我已经解释了如何做到这一点。

在将行绑定到datagrid时,输入一个条件。首先,检查该数据表中是否有数据。如果没有数据,则绑定datagrid中的列标头,否则只绑定没有datacolumn标头的行。

这里是第一个更改:声明datatable全局变量。

public partial class LunchDinnerBookingEntry : Form  
  {  
      CanteenBAL obj = new CanteenBAL();  
       DataTable dt = new DataTable();  
      public LunchDinnerBookingEntry()  
      {  
          InitializeComponent();  
      }

接着绑定时添加条件判断。

public void createnewrow()  
        {  
            if(dt.Rows.Count<=0)  
            {  

                DataColumn dc1 = new DataColumn("PERSONAL NO", typeof(int));  
                DataColumn dc2 = new DataColumn("NAME", typeof(string));  
                DataColumn dc3 = new DataColumn("DATE", typeof(string));  
                DataColumn dc4 = new DataColumn("QUANTITY", typeof(int));  
                DataColumn dc5 = new DataColumn("TYPE", typeof(string));  


                dt.Columns.Add(dc1);  
                dt.Columns.Add(dc2);  
                dt.Columns.Add(dc3);  
                dt.Columns.Add(dc4);  
                dt.Columns.Add(dc5);  



                dt.Rows.Add(txt_personalNo.Text, txt_name.Text,
                 txt_date.Text, Convert.ToInt32(txt_quantity.Text), cmb_type.SelectedItem.ToString());  


                dataGridView1.DataSource = dt;  

            }  
            else  
            {  

                dt.Rows.Add(txt_personalNo.Text, txt_name.Text, 
                txt_date.Text, Convert.ToInt32(txt_quantity.Text), cmb_type.SelectedItem.ToString());  


                dataGridView1.DataSource = dt;  

            }

因此,通过这种方式,我们就可以在windows应用程序中维护datatable状态。

本文分享自微信公众号 - 程序你好(codinghello)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 评估数据集成平台的8个技巧

    随着各个组织机构越来越多地将其数据和操作转移到Microsoft Azure云中,它们必须从存储在内部的旧系统中迁移数据。不幸的是,通过编写定制代码和遗留集成技...

    程序你好
  • 数据库MySQL中的JOIN详解

    一个完整的SQL语句中会被拆分成多个子句,子句的执行过程中会产生虚拟表(vt),但是结果只返回最后一张虚拟表。从这个思路出发,我们试着理解一下JOIN查询的执行...

    程序你好
  • 符合架构的测试

    程序你好
  • Hi Swifter:来和Guard问声好吧

    Swift正逐步占领iOS App实际开发的市场份额,Swift 的简洁、易用性已经吸引了大量开发者,大家已开始或准备开始使用Swift开发iOS App。

    博文视点Broadview
  • flask popper对tooltip做美化(flask 38)

    <small data-toggle="tooltip" data-placement="top" data-timestamp="{{ message.ti...

    用户5760343
  • TXSQL(TencentDB for MySQL) 8.0特性介绍

    概述 ---- 随着MySQL-8.0新版本不断的迭代推出,修复老版本的缺陷,其稳定性逐渐得到保障。腾讯云在此趋势下,推出具有自身功能特性的MySQL数据库产...

    腾讯数据库技术
  • Human Language Processing——Speech Recognition

    从图中可以看到,语言信号可以表示为一个d T的matrix。其中,d为向量的维度(不同的表示方法,维度不一样), T为向量的个数。 同理,文本也可以表示为一个...

    mathor
  • 搭建MC(我的世界)服务器,带Web管理面板

    这里以腾讯云为例,其他服务器推荐:https://blog.zeruns.tech/archives/383.html

    zeruns
  • circlize的简单弦状图快速作图示例

    前篇展示了R包circlize绘制弦状图一个示例,该示例算是从头绘制弦图的一种方法吧,由外到内依次绘制每个区域,过程可能有些繁琐。

    用户7585161
  • 再见 XShell 和 ITerm 2,是时候拥抱全平台高颜值终端工具 Hyper 了!

    不论是 macOS 还是 Windows 下,我们都不推荐使用系统自带终端。无论是可拓展性还是可编程性都被「系统自带」这样的特点限制。特别是 Windows 下...

    iMike

扫码关注云+社区

领取腾讯云代金券