Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datagridview,仅显示唯一值是重复的单元格值C#2005_C#_Visual Studio_Datagridview_Duplicates - Fatal编程技术网

Datagridview,仅显示唯一值是重复的单元格值C#2005

Datagridview,仅显示唯一值是重复的单元格值C#2005,c#,visual-studio,datagridview,duplicates,C#,Visual Studio,Datagridview,Duplicates,我在显示值时遇到一些问题,但每次它在datagridview中复制值时,我都使用Microsoft Visual C#2005和framework 2.0 当我编写此程序时,我发现在循环中,我需要检查重复值并对其进行计数,如果出现新值,则显示该值并发送邮件,我确实有通过smtp发送邮件的代码,但我需要对重复值进行计数并消除,只需保留原始单元格并更新其余单元格,这是连接到网格和数据生成的代码,我需要这方面的帮助,因为我还没有在web上找到有效地完成这项工作的正确代码 try

我在显示值时遇到一些问题,但每次它在datagridview中复制值时,我都使用Microsoft Visual C#2005和framework 2.0

当我编写此程序时,我发现在循环中,我需要检查重复值并对其进行计数,如果出现新值,则显示该值并发送邮件,我确实有通过smtp发送邮件的代码,但我需要对重复值进行计数并消除,只需保留原始单元格并更新其余单元格,这是连接到网格和数据生成的代码,我需要这方面的帮助,因为我还没有在web上找到有效地完成这项工作的正确代码

  try
            {

                e.Result = "";

                //int count1 = 0;
                int val = 6000;

                DataTable dt = new DataTable();
                dt.Columns.Add(new DataColumn("ComputerName", typeof(String)));          //0
                dt.Columns.Add(new DataColumn("IP", typeof(String)));            //1
                dt.Columns.Add(new DataColumn("MAC", typeof(String)));       //2
                dt.Columns.Add(new DataColumn("Descubierto", typeof(String)));  

                for (int a = 1; a <= val; a++)


                {


                    counter.Text = Convert.ToString(a);
                    if (txtWorkGroupName.Text == "") return;

                    //DataTable dt = new DataTable();
                    //dt.Clear();


                        //3
                    //int i = 0;


                    try
                    {
                        // Datos del grupo WinNT://&&&&(Nombre del grupo de trabajo)
                        DirectoryEntry DomainEntry = new DirectoryEntry("WinNT://" + txtWorkGroupName.Text + "");
                        DomainEntry.Children.SchemaFilter.Add("Computer");



                        ///*************************************************
                        /// Interacting with the pcs in the domain
                        ///*************************************************

                        foreach (DirectoryEntry machine in DomainEntry.Children)
                        {

                            string strMachineName = machine.Name;
                            string strMACAddress = "";
                            IPAddress IPAddress;
                            DateTime discovered;

                            try
                            {
                                IPAddress = getIPByName(machine.Name);

                            }
                            catch
                            {
                                continue;
                            }//try/catch

                            ///*************************************************
                            /// Get Mac
                            ///*************************************************
                            strMACAddress = getMACAddress(IPAddress);

                             ///*************************************************
                            /// discovered time
                            ///*************************************************
                            discovered = DateTime.Now;


                            ///*************************************************
                            /// Add the data to the datagridview
                            ///*************************************************

                            DataRow dr = dt.NewRow();


                            dr[0] = machine.Name;
                            dr[1] = IPAddress;
                            dr[2] = strMACAddress;
                            dr[3] = Convert.ToString(discovered);
                            dt.Rows.Add(dr);



                            dgvComputers1.DataSource = dt;



                            dgvComputers1.Refresh();

                   ///Using Unique doesent work, this was one of the solutions found
                            //dt.Columns(machine.Name).Unique = true;
                            //dt.Columns(IPAddress).Unique = true;
                            //dt.Columns(strMACAddress).Unique = true;



                        }//foreach loop


                       // DataView dv = new DataView();

                       // dv = dt;

                        Thread.Sleep(2000);

                        //dt = ((DataView)this.dgvComputers1.DataSource).Table;
                        //dt.WriteXml(@"testermac.xml");




                    }//try/catch

                    catch (Exception ex)
                    {
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }


                    if (backgroundWorker2.CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }

                }

            }
            catch (NullReferenceException ex)
            {
                MessageBox.Show("error:" + ex);
                //tbmessage.Text += "se ha producido un error: " + ex + Environment.NewLine;
                //tbmessage.SelectionStart = tbmessage.Text.Length;
                //tbmessage.ScrollToCaret();
            }
            catch (NoNullAllowedException ex)
            {
                MessageBox.Show("error:" + ex);
            }
            catch (AccessViolationException ex)
            {
                MessageBox.Show("error:" + ex);
            }


        }
试试看
{
e、 结果=”;
//int count1=0;
int val=6000;
DataTable dt=新的DataTable();
dt.Columns.Add(新数据列(“ComputerName”,typeof(String));//0
Add(新数据列(“IP”,typeof(字符串));//1
Add(newdatacolumn(“MAC”,typeof(String));//2
添加(新的数据列(“Descubierto”,typeof(String));

对于(int a=1;a而不是每次都添加新行,请尝试使用DataTable.Select或DataTable.Rows.Find检查是否存在重复项。如果没有重复项,请添加新行,如果新行已存在,请更新其他列

此外,在循环的每次迭代中设置数据源,只需执行一次

这里是一个简单的不完整的例子,每秒钟更新一次网格,您应该能够为您的程序调整这里的逻辑

    public partial class Form1 : Form
    {
        private readonly DataGridView _gridView;
        private readonly DataTable _dataTable;

        public Form1()
        {
            InitializeComponent();

            _dataTable = new DataTable();
            DataColumn computerColumn = new DataColumn("Name");
            _dataTable.Columns.Add(computerColumn);
            _dataTable.Columns.Add(new DataColumn("IP"));
            _dataTable.Columns.Add(new DataColumn("MAC"));
            _dataTable.Columns.Add(new DataColumn("Descubierto"));
            _dataTable.PrimaryKey = new [] { computerColumn };

            _gridView = new DataGridView
                            {
                                Dock = DockStyle.Fill,
                                DataSource = _dataTable
                            };
            Controls.Add(_gridView);

            System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
            timer.Interval = 1000;
            timer.Tick += TimerTick;     
            timer.Start();
        }

        void TimerTick(object sender, EventArgs e)
        {
            DirectoryEntry domainEntry = new DirectoryEntry("WinNT://mydomain"); 
            domainEntry.Children.SchemaFilter.Add("Computer"); 

            _dataTable.BeginLoadData();

            foreach (DirectoryEntry machine in domainEntry.Children) 
            { 
                DataRow row = _dataTable.Rows.Find(machine.Name);

                if(row == null)
                {
                    row = _dataTable.NewRow();
                    row[0] = machine.Name;
                    _dataTable.Rows.Add(row);
                }

                row[3] = DateTime.Now.ToString();
            }

            _dataTable.EndLoadData();
        } 
    }

很好,很好的建议,我不是一个程序员,这是我论文的一部分……我正在为一个域管理员构建一个远程广告管理机器人,然后你可能想买一本好书或者在互联网上找到一个好的教程。加里有一个很好的答案,你又发布了