回 帖 发 新 帖 刷新版面

主题:如何将datagridview和某个table绑定在一起?

接标题:在table中更新数据时,datagridview中也能自动更新显示。

回复列表 (共8个回复)

沙发

刷新一下 或者重新邦定过去

板凳

public partial class frmMain : Form
    {
        DataTable tableAddNew = new DataTable("tableAddNew

        public frmMain()
        {
            InitializeComponent();
            InitAddNewTable();

        }

        /// <summary>
        /// 初始化添加表
        /// </summary>
        private void InitAddNewTable()
        {
            tableAddNew.Columns.Add("Country", typeof(string));
            tableAddNew.Columns.Add("Department", typeof(string));
            tableAddNew.Columns.Add("Assort", typeof(string));
            tableAddNew.Columns.Add("Content", typeof(string));
            tableAddNew.Columns.Add("Url", typeof(string));
            tableAddNew.Columns.Add("LocalPath", typeof(string));
            tableAddNew.Columns.Add("FileName", typeof(string));
            tableAddNew.Columns.Add("UploadTime", typeof(DateTime));
            tableAddNew.Columns.Add("Description", typeof(string));
        }
   
        private void frmMain_Load(object sender, EventArgs e)
        {
            // TODO: 这行代码将数据加载到表“urlInfoDataSet.Country”中。您可以根据需要移动或移除它。
            this.countryTableAdapter.Fill(this.urlInfoDataSet.Country);
            bindingSourceOfAddNewTable.DataSource = tableAddNew;
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            string isPrepare;
            string[] row = new string[8];

            isPrepare = IsPrepare();
            if (isPrepare != "")
            {
                MessageBox.Show ("请检查" + isPrepare + " 等要素是否填好?","提示",MessageBoxButtons.OK);
                return;
            }
            row[0]=cmbBCountry.Text;
            row[1]=cmbBDepartment.Text;
            row[2]=txtBAssort.Text;
            row[3]=txtBContent.Text;
            row[4]=txtBUrl.Text;
            row[5]=txtBLocalPath.Text;
            row[6] = txtBFileName.Text;
            row[7]=txtBDescription.Text;
            //AddNewElement(row);
            AddNewElementToTable(row);
            bindingSourceOfAddNewTable.DataSource = tableAddNew;
        }

        /// <summary>
        /// 将各要素添加到新建表中
        /// </summary>
        /// <param name="row"></param>
        private void AddNewElementToTable(string[] row)
        {
            DataRow rowAddNew = tableAddNew.NewRow();
            DateTime nowDateTime = DateTime.Now;
            TimeSpan oneDay = new TimeSpan (-1,0,0,0);

            rowAddNew["Country"] = row[0];
            rowAddNew["Department"] = row[1];
            rowAddNew["Assort"] = row[2];
            rowAddNew["Content"] = row[3];
            rowAddNew["Url"] = row[4];
            rowAddNew["LocalPath"] = row[5];
            rowAddNew["FileName"] = row[6];
            rowAddNew["UploadTime"] = nowDateTime.Add(oneDay);
            rowAddNew["Description"] = row[7];
        }
我试过了,不行啊,datagridview一点反应都没有。datagridview是通过属性设置绑定到bindingSourceOfAddNewTable的:datagridview.DataSource=bindingSourceOfAddNewTable;

3 楼


请高人帮忙解答啊!

4 楼

等了一天了,都没有人过来帮忙啊!~~

5 楼

55555555555555,还是没有人帮俺啊!~~~

6 楼

我狂晕啊,原本是在IDE的属性页里直接把dGVAddNew.DataSource = bindingSourceOfAddNewTable的,死活不能更新;今天早上把dGVAddNew.DataSource 属性改为“无”,在frmMain_Load中添加dGVAddNew.DataSource = bindingSourceOfAddNewTable;这样居然就可以了,吐血!~~
难道直接在IDE里把datagridview和bindingSource绑定不行吗?这是否是个BUG呢?

7 楼

我在想,之所以会出现datagridview无法刷新的问题,是否和绑定的顺序有关?在IDE设计器中绑定datagridview和bindingSource是否要早于在代码窗口绑定bindingSource和table?
另外,VS2005和VS2003不同,2005把窗体设计的代码单独放到以Designer.cs结尾的文件中,这个Designer.cs文件执行应该早于普通cs文件,这样datagridview和bindingSource的绑定就早于bindingSource和table的绑定,我觉得之前问题主要出现在这里。
还有个结论,不知是否正确:只要按照数据源——>绑定组件-->显示控件的顺序绑定,不用其它操作,在数据源的任何更新都能自动更新到显示控件,同样,在显示控件的更新也能自动更新到数据源。请大家指教!

8 楼

为什么没有人回答呢?难道我问的太简单,大家都不屑于回答吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册