我有一个List ComparisonItem,我想在datagridview dataGridViewCompare中显示它。 ComparisonItem的一些属性也是列表,dataGridViewCompare不会显示这些列。
实际上我不想在单元格中显示列表,但是当用户选择特定行时,我想在文本框中显示该单元格的内容。
public class ComparedItem
{
public ElementItem SourceElement { get; private set; }
public ElementItem TargetElement { get; private set; }
public bool HasErrors { get; set; }
public List<ErrorType> ErrorTypes { get; set; }
public string FriendlyErrorNames { get; set; }
public List<string> DetailsInconsistencyError { get; set; }
public string DetailsSpecialCharsError { get; set; }
public string DetailsTextError { get; set; }
public ComparedItem(ElementItem source, ElementItem target)
{
SourceElement = source;
TargetElement = target;
DetailsInconsistencyError = new List<string>();
DetailsInconsistencyError.Add("Test"); // <- Temp
ErrorTypes = new List<ErrorType>();
FriendlyErrorNames = String.Empty;
}
}
以我的主要形式:
List<ComparedItem> = new List<ComparedItem> comparedItems;
// fill list in some other code...
dataGridViewCompare.DataSource = comparedItems;
dataGridViewCompare显示我期望的所有行,但只显示列
显示。
迷路了。
是否无法在datagridview单元格中保存列表?
答案 0 :(得分:2)
我不认为您可以在DGV单元格中显示List<T>
。
但它位于DataSource
,因此您可以根据需要提取值并在TextBoxes
中显示。
以下是如何访问列表中的(第一个选定的)行绑定到的项目:
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count <= 0) return;
ComparedItem ci = (dataGridView1.SelectedRows[0].DataBoundItem as ComparedItem);
if (ci != null)
{
textBox1.Text = someStringRepresentation(ci.ErrorTypes);
textBox2.Text = someStringRepresentation(ci.DetailsInconsistencyError);
}
}
根据SelectionMode
,您可能希望在CurrentCellChanged
事件等中添加类似的代码。