我需要将动态创建的文本框数组绑定到字符串[]或List&lt; string&gt;。这是最接近WinForm Controls binding to a List<T> problem但没有雪茄。
通常对于单个文本框,我绑定Textboxes的Text属性:
Engine engine = new Engine();
public frmMain()
{
InitializeComponent();
txtQuery.DataBindings.Add("Text",engine,"Query");
}
到类属性:
public class Engine : IEngine, INotifyPropertyChanged
{
private string query;
public string Query
{
get { return query; }
set
{
query = value;
InvokePropertyChanged(new PropertyChangedEventArgs("Query"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void InvokePropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, e);
}
}
我已经给了它一个文本框和字符串数组但没有运气:
前端:
TextBox[] txtBoxArr = new TextBox[numberOfDimensions];
for (int i = 0; i < numberOfDimensions;i++)
{
string tabName = "Dataset" + (i + 1);
tabCtrlDatasets.TabPages.Add(tabName,tabName);
txtBoxArr[i] = new TextBox();
txtBoxArr[i].Name = "txtDataset" + i ;
txtBoxArr[i].DataBindings.Add("Text",engine,"Dataset");
tabCtrlDatasets.TabPages[i].Controls.Add(txtBoxArr[i]);
}
后端:
private string[] dataset;
public string[] Dataset
{
get { return dataset; }
set
{
dataset = value;
InvokePropertyChanged(new PropertyChangedEventArgs("Dataset"));
}
}
要使其正常工作,我需要知道数组中项目的索引。我不记得以前做过这个,有没有人知道如何识别文本框的索引以将其绑定到字符串数组中的正确项目?
我今天有点累,并且有一个内存块。
答案 0 :(得分:1)
您可以使用带有单行的TextBox
,而不是用于保存DataTable
值的字符串数组。通过这种方式,您不必增加Engine
类的复杂性(因为它仍然只有一个属性),您可以将文本框绑定到engine.DataTable
的{{1}} (通过列的索引映射它们)。
请尝试以下表格:
DataColumnCollection
并像这样修改Engine engine = new Engine();
public Form1()
{
InitializeComponent();
var dt = new DataTable();
dt.Columns.Add("column0");
dt.Columns.Add("column1");
dt.Columns.Add("column2");
dt.Rows.Add("abc", DateTime.Now, 123456, 789.0123F);
engine.DataTable = dt;
int numberOfDimensions = engine.DataTable.Columns.Count;
TextBox[] txtBoxArr = new TextBox[numberOfDimensions];
for (int i = 0; i < numberOfDimensions; i++)
{
string tabName = "Dataset" + (i + 1);
tabCtrlDatasets.TabPages.Add(tabName, tabName);
txtBoxArr[i] = new TextBox();
txtBoxArr[i].Name = engine.DataTable.Columns[i].ColumnName;
txtBoxArr[i].DataBindings.Add("Text",
engine.DataTable, txtBoxArr[i].Name);
tabCtrlDatasets.TabPages[i].Controls.Add(txtBoxArr[i]);
}
}
类:
Engine