繁体   English   中英

C#DataGridView绑定列表

[英]C# DataGridView BindingList

有人可以帮助我解释一下为什么我在以下代码中为DataBoundItem获取空值的原因:

public partial class ucInstanceSearch : UserControl
{
    private IStorage tempStorage;
    private BindingList<IInstance> instanceData;

    public ucInstanceSearch(IStorage new_Storage)
    {
        InitializeComponent();

        this.tempStorage = new_Storage;

        instanceData = new BindingList<IInstance>(tempStorage.Instance);

        InitalizeInstanceTable();
    }

    private void InitalizeInstanceTable()
    {
        dgInstanceTable.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        dgInstanceTable.MultiSelect = false;
       dgInstanceTable.AutoGenerateColumns = false;
        dgInstanceTable.RowHeadersVisible = false;

        dgInstanceTable.DataSource = instanceData;
    }

    private void PopulateInstanceTable(String searchFilter)
    {
        dgInstanceTable.Update();
    }

    private void dgInstanceTable_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {

    }

    private void btnSearch_Click(object sender, EventArgs e)
    {
        if (txtSearch.Text != "")
        {
            PopulateInstanceTable(txtSearch.Text);
        }
        else
        {
            MessageBox.Show("Enter Data");
        }
    }

    private void btnSelect_Click(object sender, EventArgs e)
    {
        MessageBox.Show(dgInstanceTable.SelectedRows[0].Cells[2].Value + string.Empty);

        DataRow row = (dgInstanceTable.SelectedRows[0].DataBoundItem as DataRowView).Row;
        IInstance selected = (IInstance)row;


        textBox1.Text = selected.URL; 
    }

    private void ucInstanceSearch_Load(object sender, EventArgs e)
    {

    }


}

您需要将DataBoundItem IInstance转换为IInstance类型, IInstance不是DataRowView类型。

如果类型转换失败,则“ as”操作者将返回null 将其直接转换为您期望的类型是更安全的,这样,如果您犯了错误,代码将失败。

我没有注意到您的脚本中有数据源。 你可以试试这个吗?

SQL Server:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        string connetionString;
        SqlConnection connection;
        SqlDataAdapter adapter;
        SqlCommandBuilder cmdBuilder;
        DataSet ds = new DataSet();
        DataSet changes;
        string Sql;
        Int32 i; 

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
            connection = new SqlConnection(connetionString);
            Sql = "select * from Product";
            try
            {
                connection.Open();
                adapter = new SqlDataAdapter(Sql, connection);
                adapter.Fill(ds);
                connection.Close();
                dataGridView1.DataSource = ds.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show (ex.ToString());
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                cmdBuilder = new SqlCommandBuilder(adapter);
                changes = ds.GetChanges();
                if (changes != null)
                {
                    adapter.Update(changes);
                }
                MessageBox.Show("Changes Done");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }
}

MS Access:

using System;
using System.Data;
using System.Data.OleDb; 
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        string connetionString;
        OleDbConnection connection;
        OleDbDataAdapter oledbAdapter;
        OleDbCommandBuilder oledbCmdBuilder;
        DataSet ds = new DataSet();
        DataSet changes;
        int i;
        string Sql;


        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Your mdb filename;";
            connection = new OleDbConnection(connetionString);
            Sql = "select * from tblUsers";
            try
            {
                connection.Open();
                oledbAdapter = new OleDbDataAdapter(Sql, connection);
                oledbAdapter.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show (ex.ToString());
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                oledbCmdBuilder = new OleDbCommandBuilder(oledbAdapter);
                changes = ds.GetChanges();
                if (changes != null)
                {
                    oledbAdapter.Update(ds.Tables[0]);
                }
                ds.AcceptChanges();
                MessageBox.Show("Save changes");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM