I'm trying to add a foreign key column in my grid. I have a backups table that has a pc_id column. I also have a pc table with pc_id and pc_name columns. Right now, my grid is displaying the pc_id because that is the value that is stored in the backups table. However, I want the grid to display the pc_name.
Index.cshtml:
@{
ViewBag.Title = "Backup Dashboard";
}
@model IEnumerable<
MayetDashboard.Models.backup
>
<
h1
>Backup</
h1
>
@(Html.Kendo().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
columns.Bound(c => c.backup_id).Title("Backup ID");
columns.Bound(c => c.pc_id).Title("PC ID");
//columns.ForeignKey(c => c.pc_id, (System.Collections.IEnumerable)ViewData["pc"], "pc_id", "pc_name").Title("PC ID");
columns.Bound(c => c.log_file).Title("Log File").Hidden(true);
columns.Bound(c => c.backup_date).Title("Backup Date");
columns.Bound(c => c.backup_job).Title("Backup Job");
columns.Bound(c => c.backup_result).Title("Backup Result");
columns.Bound(c => c.backup_text).Title("Backup Text").Hidden(true);
columns.Bound(c => c.stamp_date).Title("Stamp Date");
columns.Command(command => { command.Destroy(); });
})
.Pageable()
.Filterable(filter =>
{
filter.Extra(false);
filter.Operators(op =>
{
op.ForString(str =>
{
str.Clear().Contains("Contains");
});
});
})
.DataSource(dataSource => dataSource
.Server()
.Model(model =>
{
model.Id(p => p.backup_id);
model.Field(p => p.pc_id).DefaultValue(1);
})
.Read(read => read.Action("Index", "Backup"))
.Destroy("backups_Destroy", "Backup")
)
)
BackupController.cs:
using System;
using System.Linq;
using System.Data;
using System.Collections.Generic;
using System.Web.Mvc;
using System.Web.Routing;
using Kendo.Mvc.Extensions;
using MayetDashboard.Models;
using System.Data.Entity;
using System.IO;
using Telerik.Windows.Zip;
using System.IO.Compression;
using System.Text.RegularExpressions;
using System.Data.SqlClient;
using Kendo.Mvc.UI;
namespace MayetDashboard.Controllers
{
public class BackupService : IDisposable
{
private mayet_dashboardEntities1 db;
public BackupService(mayet_dashboardEntities1 db)
{
this.db = db;
}
public IEnumerable<
backup
> Read()
{
return db.backups;
}
public void Destroy(backup backup)
{
var entity = new backup
{
backup_id = backup.backup_id,
pc_id = backup.pc_id,
log_file = backup.log_file,
backup_date = backup.backup_date,
backup_job = backup.backup_job,
backup_result = backup.backup_result,
backup_text = backup.backup_text,
stamp_date = backup.stamp_date,
};
db.backups.Attach(entity);
db.backups.Remove(entity);
db.SaveChanges();
}
public void Dispose()
{
db.Dispose();
}
}
public class BackupController : Controller
{
private BackupService backupService;
public BackupController()
{
backupService = new BackupService(new mayet_dashboardEntities1());
}
protected override void Dispose(bool disposing)
{
backupService.Dispose();
base.Dispose(disposing);
}
public ActionResult Index()
{
return View(backupService.Read());
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Backups_Destroy(backup backup)
{
RouteValueDictionary routeValues;
backupService.Destroy(backup);
routeValues = this.GridRouteValues();
return RedirectToAction("Index", routeValues);
}
public void Update()
{
//GET ALL ZIPPED UP LOG FILES
string[] arrayLogs = Directory.GetFiles(@"\\192.168.222.245\Backups\logs", "*.zip", System.IO.SearchOption.AllDirectories);
var countLogs = arrayLogs.Length;
string tempFolder = @"C:\temp\";
for (int i = 0; i < countLogs; i++)
{
string logItem = arrayLogs[i];
var logDirectory = new FileInfo(logItem).DirectoryName;
//ZipFile.ExtractToDirectory(logItem, @"C:\temp\");
using (System.IO.Compression.ZipArchive archive = ZipFile.OpenRead(logItem))
{
foreach (System.IO.Compression.ZipArchiveEntry entry in archive.Entries)
{
if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
{
entry.ExtractToFile(Path.Combine(tempFolder, entry.FullName), true);
}
}
}
//BACKUP_TEXT COLUMN
string backupText = System.IO.File.ReadAllText(tempFolder + "LogFile.txt");
string resultBackupText = Regex.Replace(backupText, @"^\s+$[\r\n]*", string.Empty, RegexOptions.Multiline);
//PC_ID COLUMN
int startPosPcId = resultBackupText.LastIndexOf("Computer/Account: ") + "Computer/Account: ".Length;
int lengthPcId = resultBackupText.IndexOf(" /") - startPosPcId;
string subPcId = resultBackupText.Substring(startPosPcId, lengthPcId);
int finalSubPcId = 0;
if (subPcId == "REA015-PC") finalSubPcId = 1;
else if (subPcId == "REA010-PC") finalSubPcId = 2;
else if (subPcId == "DESKTOP-V4KPLUF") finalSubPcId = 3;
else if (subPcId == "REA014-PC") finalSubPcId = 4;
else if (subPcId == "REA005-PC") finalSubPcId = 5;
else if (subPcId == "REA016-PC") finalSubPcId = 6;
else if (subPcId == "SCOTT-PC") finalSubPcId = 7;
else if (subPcId == "DESKTOP-Q6FFN6U") finalSubPcId = 8;
else if (subPcId == "REA009-PC") finalSubPcId = 9;
else if (subPcId == "ALI-PC") finalSubPcId = 10;
else if (subPcId == "REA006-PC") finalSubPcId = 11;
else if (subPcId == "DESKTOP-0B5GIC0") finalSubPcId = 12;
else if (subPcId == "REA018-PC") finalSubPcId = 13;
else if (subPcId == "EDREAINC-PC") finalSubPcId = 14;
else if (subPcId == "REA013-PC") finalSubPcId = 15;
else if (subPcId == "REA011-PC") finalSubPcId = 16;
else if (subPcId == "JEA-PC") finalSubPcId = 17;
else if (subPcId == "DESKTOP-UHJ55OH") finalSubPcId = 18;
else if (subPcId == "REA019-PC") finalSubPcId = 19;
//BACKUP_DATE COLUMN
int startPosBackupDate = resultBackupText.IndexOf("Backup end: ") + "Backup end: ".Length;
int lengthBackupDate = resultBackupText.IndexOf("Time taken: ") - startPosBackupDate;
string subBackupDate = resultBackupText.Substring(startPosBackupDate, lengthBackupDate);
string resultSubBackupDate = subBackupDate.TrimEnd('\n').TrimEnd('\r');
DateTime finalResultSubBackupDate = DateTime.Parse(resultSubBackupDate);
//BACKUP_JOB COLUMN
int startPosBackupJob = resultBackupText.IndexOf("Iperius Backup Report") + "Iperius Backup Report".Length;
int lengthBackupJob = resultBackupText.IndexOf("Backup start: ") - startPosBackupJob;
string subBackupJob = resultBackupText.Substring(startPosBackupJob, lengthBackupJob);
string resultSubBackupJob = subBackupJob.TrimStart('\r').TrimStart('\n').TrimEnd('\n').TrimEnd('\r');
//BACKUP_RESULT COLUMN
int startPosBackupResult = resultBackupText.IndexOf("Backup result: ") + "Backup result: ".Length;
int lengthBackupResult = resultBackupText.LastIndexOf("Backup start: ") - startPosBackupResult;
string subBackupResult = resultBackupText.Substring(startPosBackupResult, lengthBackupResult);
string resultSubBackupResult = subBackupResult.TrimEnd('\n').TrimEnd('\r');
//INSERT INTO BACKUP TABLE
using (var context = new mayet_dashboardEntities1())
{
var table = new backup
{
pc_id = finalSubPcId,
log_file = logItem,
backup_date = finalResultSubBackupDate,
backup_job = resultSubBackupJob,
backup_result = resultSubBackupResult,
backup_text = resultBackupText,
stamp_date = DateTime.Now
};
context.backups.Add(table);
context.SaveChanges();
}
//MOVE LOG FILE FROM LOGS TO LOGS_PROCESSED FOLDER
string fileName = Path.GetFileNameWithoutExtension(logItem);
string fileExtension = Path.GetExtension(logItem);
Regex rgx = new Regex("[^a-zA-Z0-9 -]");
string fileBackupDate = rgx.Replace(resultSubBackupDate, "");
string fileRename = @"\\192.168.222.245\Backups\logs_processed\\" + fileName + "_" + subPcId + "_" + fileBackupDate + fileExtension;
System.IO.File.Move(logItem, fileRename);
}
}
}
}
pc.cs:
//------------------------------------------------------------------------------
// <
auto-generated
>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </
auto-generated
>
//------------------------------------------------------------------------------
namespace MayetDashboard.Models
{
using System;
using System.Collections.Generic;
public partial class pc
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public pc()
{
this.backups = new HashSet<
backup
>();
this.events = new HashSet<@event>();
}
public int pc_id { get; set; }
public string pc_name { get; set; }
public Nullable<
int
> user_id { get; set; }
public string system { get; set; }
public string service_tag { get; set; }
public Nullable<
System.DateTime
> purchase_date { get; set; }
public string backup_code { get; set; }
public string systeminfo_dump { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<
backup
> backups { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<@event> events { get; set; }
public virtual user user { get; set; }
}
}
backup.cs:
//------------------------------------------------------------------------------
// <
auto-generated
>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </
auto-generated
>
//------------------------------------------------------------------------------
namespace MayetDashboard.Models
{
using System;
using System.Collections.Generic;
public partial class pc
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public pc()
{
this.backups = new HashSet<
backup
>();
this.events = new HashSet<@event>();
}
public int pc_id { get; set; }
public string pc_name { get; set; }
public Nullable<
int
> user_id { get; set; }
public string system { get; set; }
public string service_tag { get; set; }
public Nullable<
System.DateTime
> purchase_date { get; set; }
public string backup_code { get; set; }
public string systeminfo_dump { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<
backup
> backups { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<@event> events { get; set; }
public virtual user user { get; set; }
}
}
Thank you!