防止重复添加datagridview

时间:2015-03-08 23:41:03

标签: c# winforms datagridview

我正在尝试创建一个从现有数据库中获取结果的应用程序,将其附加到cvs文件中,然后将其推回到具有附加记录的数据库中。问题是我因此而得到了很多重复。

例如,假设我在我的数据库中有这个:

ID     NAME
 1     Jon
 2     Jason
 3     Adam

我的cvs看起来像这样:

ID     NAME
 1     Jon
 2     Jason
 3     Adam
 4     Eva
 5     Jack

然后我会在我的datagridview中得到这个:

ID     NAME
 1     Jon
 2     Jason
 3     Adam
 1     Jon
 2     Jason
 3     Adam
 4     Eva
 5     Jack

如何防止它添加重复项?我已经有一些东西可以从cvs文件中删除重复项,但我不知道如何检查我从select语句获得的记录是否等于cvs文件中的记录。

这是我的代码,_docentid基本上就像上面的例子一样,对于_docentnaam是NAME同样如此

               public partial class Form1 : Form
{
    private readonly List<string> _docentid = new List<string>();
    private readonly List<string> _docentnaam = new List<string>();

    #region Members

    private DataSet _myDataSet;

    #endregion

    public Form1()
    {
        InitializeComponent();
    }

    #region Properties

    public DataSet MyDataSet
    {
        get { return _myDataSet ?? (_myDataSet = new DataSet()); }
    }

    #endregion

    private void buttonGet_Click(object sender, EventArgs e)
    {
            StreamReader reader = new StreamReader(File.OpenRead(@"C:\Temp\exceltest.csv"));
            while (!reader.EndOfStream)
            {
                string line = reader.ReadLine();
                if (line == null) continue;
                string[] values = line.Split(';');

                _docentid.Add(values[4]);
                _docentnaam.Add(values[5]);
            }

        SqlDataAdapter myDataAdapter = new SqlDataAdapter();
        SqlCommand mySelectCommand = new SqlCommand
        {
            CommandText = "SELECT * FROM dbo.docent;",
            CommandType = CommandType.Text
        };

        myDataAdapter.SelectCommand = mySelectCommand;

        using (
            SqlConnection cnn =
                new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionPlain"].ConnectionString))
        {
            mySelectCommand.Connection = cnn;
            myDataAdapter.Fill(MyDataSet);
        }

        int incr = 1;
        foreach (string t in _docentnaam.Skip(1))
        {
            DataRow rw = MyDataSet.Tables[0].NewRow();
            rw["docentid"] = Convert.ToInt32(_docentid[incr]);
            rw["docentnaam"] = t;
            if (!MyDataSet.Tables[0].Rows.Cast<DataRow>().Any(row => row["docentid"].Equals(rw["docentid"]) && row["docentnaam"].Equals(rw["docentnaam"])))
            incr++;
        }
        dataGridViewPersons.DataSource = MyDataSet.Tables[0];
    }

0 个答案:

没有答案