背景
BindingListに自分で作ったクラスを登録し、DataGridViewのdatasourceにセットするとDataGridViewにデータが反映され便利である。ただ、自分で作ったクラスのデータのうち、一部しかデータグリッドに乗せたくない場面もある。その時にわざわざデータグリッド表示用のクラスと、それ以外のデータも管理するクラスを別々に作成するのは管理上手間がかかる。このため、1つのクラスだけでデータグリッドに表示させる/させないを制御する方法を調べたのでメモっておく。
方法
クラスのpublicなプロパティとして用意したデータのみがDataGirdViewに表示されるという性質を利用し、以下のように欺けばよい。
/// データグリッド表示用のプロセスデータクラス
public class ProcessData
{
// データグリッドで自動で見せる列
public int processId { get; set; }
public string Arguments { get; set; }
public DateTime startTime { get; set; }
public DateTime endTime { get; set; }
public String exitCode { get; set; }
public String status { get; set; }
// データグリッドで自動で見せない列
private Process process;
private String inputString;
private StringBuilder outputStringBuilder;
private string workingDirectory;
private PythonCommandExecutorForm detailForm;
private string fileName;
public ProcessData()
{
this.outputStringBuilder = new StringBuilder();
}
public void setProcess(Process process)
{
this.process = process;
}
public Process getProcess()
{
return this.process;
}
public void setOutputStringBuilder(StringBuilder outputStringBuilder)
{
this.outputStringBuilder = outputStringBuilder;
}
public StringBuilder getOutputStringBuilder()
{
return this.outputStringBuilder;
}
public void setWorkingDirectory(String workingDirectory)
{
this.workingDirectory = workingDirectory;
}
public String getWorkingDirectory()
{
return this.workingDirectory;
}
public void setFileName(String fileName)
{
this.fileName = fileName;
}
public String getFileName()
{
return this.fileName;
}
public String getInputString()
{
return this.inputString;
}
public void setInputString(String inputString)
{
this.inputString = inputString;
}
public void setDetailForm(PythonCommandExecutorForm detailForm)
{
this.detailForm = detailForm;
}
public PythonCommandExecutorForm getDetailForm()
{
return this.detailForm;
}
}