如下所示,我有一个包含多列的DataGridView
。在DataGridView
的每一行中,将是程序安装路径的版本。使用此值,我想使用文件夹的大小并将其放在新列中。
我有一种计算字符串大小的方法:
private static long ObterTamanhoDiretorio(string tamanhoDir)
{
DirectoryInfo dire = new DirectoryInfo(tamanhoDir.ToString());
return dire.EnumerateFiles("*.*", SearchOption.AllDirectories).Sum(fi => fi.Length);
}
我不知道我是否必须使用它。
foreach (DataGridViewRow item in dataGridView1.Rows)
{
}
这就是我得到的:
ObjectQuery query8 = new ObjectQuery("SELECT Description, Version, InstallDate, Vendor, InstallLocation FROM Win32_Product");
ManagementObjectSearcher searcher8 = new ManagementObjectSearcher(scope, query8);
DataTable dt = new DataTable();
dt.Columns.Add("Program");
dt.Columns.Add("Version");
dt.Columns.Add("Installing Date");
dt.Columns.Add("Company");
dt.Columns.Add("Install Location");
dt.Columns.Add("Size");
foreach (DataGridViewRow item in dataGridView1.Rows)
{
foreach (ManagementObject queryObj in searcher8.Get())
{
var paths = new List<string>();
var installPathColumnPos = 0;
string s = item.Cells[installPathColumnPos].Value.ToString();
dt.Rows.Add(new object[] { queryObj["Description"], queryObj["Version"], FormatDateTime(queryObj["InstallDate"]), queryObj["Vendor"], queryObj["InstallLocation"], s });
}
}
dataGridView1.DataSource = dt;
我想知道的是如何在每一行上看到这个值。如果您有任何想法,谢谢。
答案 0 :(得分:0)
好的,根据我们的评论,我相信以下是您的目标。
DataTable dt = new DataTable();
dt.Columns.Add("Program", typeof(string));
dt.Columns.Add("Version", typeof(double));
dt.Columns.Add("InstallDate", typeof(DateTime));
dt.Columns.Add("Company", typeof(string));
dt.Columns.Add("InstallLocation", typeof(string));
dt.Columns.Add("Size", typeof(long));
foreach (ManagementObject queryObj in searcher8.Get())
{
var newRow = dt.NewRow();
newRow["Program"] = queryObj["Description"];
newRow["Version"] = queryObj["Version"];
newRow["InstallDate"] = FormatDateTime(queryObj["InstallDate"]);
newRow["Company"] = queryObj["Vendor"];
newRow["InstallLocation"] = queryObj["InstallLocation"];
newRow["Size"] = ObterTamanhoDiretorio(queryObj["InstallLocation"]);
dt.Rows.Add(newRow);
}
dataGridView1.DataSource = dt;
因此,我们遍历searcher8的结果,并为每个条目的数据表添加一个新行。然后根据&#34; InstallLocation&#34;
中的值设置size列 private static long ObterTamanhoDiretorio(string tamanhoDir)
{
if (string.IsNullOrEmpty(tamanhoDir))
return 0;
DirectoryInfo dire = new DirectoryInfo(tamanhoDir.ToString());
return dire.EnumerateFiles("*.*", SearchOption.AllDirectories).Sum(fi => fi.Length);
}
希望有所帮助。
答案 1 :(得分:0)
var existingValues = dataGridView1.Rows
.OfType<DataGridViewRow>()
.Where(x => x.Cells[installPathColumnPos].Value != null)
.Select(x => x.Cells[installPathColumnPos].Value.ToString())
你可以通过Linq获得这些值,请检查一下。