gpt4 book ai didi

c# - 将动态创建的文本框数组绑定(bind)到字符串数组或 List

转载 作者:行者123 更新时间:2023-11-30 17:55:28 27 4
gpt4 key购买 nike

我需要将一组动态创建的文本框绑定(bind)到 string[] 或 List 。这是最近的 WinForm Controls binding to a List<T> problem但没有雪茄。

通常对于单个文本框,我绑定(bind)文本框的 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"));
}
}

要让它工作,我需要知道数组中项目的索引。我不记得以前这样做过,有谁知道如何识别文本框的索引以将其绑定(bind)到字符串数组中的正确项?

我今天有点累,有内存障碍。

最佳答案

您可以使用包含单行的DataTable,而不是用于保存TextBox 值的字符串数组。这样,您不必增加 Engine 类的复杂性(因为它仍然只有一个属性),您可以将文本框绑定(bind)到 engine.DataTableDataColumnCollection(通过列的索引映射它们)。

尝试以下形式:

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类:

private DataTable dataTable;
public DataTable DataTable
{
get
{
return dataTable;
}
set
{
dataTable = value;
InvokePropertyChanged(new PropertyChangedEventArgs("DataTable"));
}
}

关于c# - 将动态创建的文本框数组绑定(bind)到字符串数组或 List<string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15081418/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com