Datagridview,仅显示唯一值是重复的单元格值C#2005
我在显示值时遇到一些问题,但每次它在datagridview中复制值时,我都使用Microsoft Visual C#2005和framework 2.0 当我编写此程序时,我发现在循环中,我需要检查重复值并对其进行计数,如果出现新值,则显示该值并发送邮件,我确实有通过smtp发送邮件的代码,但我需要对重复值进行计数并消除,只需保留原始单元格并更新其余单元格,这是连接到网格和数据生成的代码,我需要这方面的帮助,因为我还没有在web上找到有效地完成这项工作的正确代码Datagridview,仅显示唯一值是重复的单元格值C#2005,c#,visual-studio,datagridview,duplicates,C#,Visual Studio,Datagridview,Duplicates,我在显示值时遇到一些问题,但每次它在datagridview中复制值时,我都使用Microsoft Visual C#2005和framework 2.0 当我编写此程序时,我发现在循环中,我需要检查重复值并对其进行计数,如果出现新值,则显示该值并发送邮件,我确实有通过smtp发送邮件的代码,但我需要对重复值进行计数并消除,只需保留原始单元格并更新其余单元格,这是连接到网格和数据生成的代码,我需要这方面的帮助,因为我还没有在web上找到有效地完成这项工作的正确代码 try
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();
}
}
很好,很好的建议,我不是一个程序员,这是我论文的一部分……我正在为一个域管理员构建一个远程广告管理机器人,然后你可能想买一本好书或者在互联网上找到一个好的教程。加里有一个很好的答案,你又发布了