c# - DataGrid 中的动态行和列以及从 WPF 控件写入的每个单元格
问题描述
我是 WPF 新手,我正在尝试创建一个 DataGrid,其中定义了 4 列“票务信息”、“名称”、“电子邮件”和“邮政编码”。我要做的是:
System.Data.DataTable table = new System.Data.DataTable();
table.Columns.Add("Info Tickets");
table.Columns.Add("Name");
table.Columns.Add("Email");
table.Columns.Add("ZipCode");
后来我打算根据用户给出的数字自动生成行,我将这个数量保存在一个变量中并在一个循环中使用它来以这种方式生成行:
int quantity = (int)Application.Current.Resources["NumPeopleQuantity"];
for (int i = 0; i < quantity; i++)
{
// Create row
System.Data.DataRow row = table.NewRow();
row["Info Tickets"] = i + 1;
row["Name"] = "";
row["Email"] = "";
row["ZipCode"] = "";
// Insert the row
table.Rows.Add(row);
}
最后,我将表与我创建的数据网格相关联,如下所示:
Grid1.ItemsSource = ((System.ComponentModel.IListSource)table).GetList();
这可以正常工作,并将所需的列和行添加到 DataGrid。到目前为止一切都很完美,我可以从我的电脑键盘上为每一行写一个姓名、电子邮件和邮政编码,当信息被正确填写后,我有一个按钮可以检索 dataGrid 的所有内容并将其分配给模型操作它在代码中,我这样做如下:
System.Data.DataView data = (System.Data.DataView)Grid1.ItemsSource;
var f = (PaymentViewModel)DataContext;
string expresion;
expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
for (int i = 0; i < data.Count; i++)
{
obj = new DataContactTicket
{
CustomerName = data.Table.Rows[i]["Name"].ToString(),
CustomerEmail = data.Table.Rows[i]["Email"].ToString(),
CustomerZip = data.Table.Rows[i]["ZipCode"].ToString()
};
if (obj.CustomerName == "" || obj.CustomerEmail == "" || obj.CustomerZip == "")
{
f.Mensaje = "Ticket information fields cannot be empty";
return;
}
else
{
if (Regex.IsMatch(obj.CustomerEmail, expresion))
{
if (Regex.Replace(obj.CustomerEmail, expresion, String.Empty).Length == 0)
{
names.Add(obj);
}
else
{
return;
}
}
else
{
f.Mensaje = "Please validate the email format";
return;
}
}
}
f.Grid1 = names;
我进行了相应的验证并将它们分配给我的 ViewModel 中的一个列表,一切都是正确的,我遇到的问题是我需要用户从 onScreenKeyboard 而不是从计算机的键盘输入这些信息来输入文本框很容易,参考如下所示:
<TextBox x:Name="TxtMail" Height="auto" Width="500" FontSize="24" FontWeight="Bold" TextChanged="TxtMail_TextChanged"
Text="{Binding Text, ElementName=onScreenKeyboard}"/>
<Grid HorizontalAlignment="Stretch" Margin="114,-208,-114,208">
<StackPanel HorizontalAlignment="Left" Margin="-132,240,0,-240">
<TermControls:OnScreenKeyboard x:Name="onScreenKeyboard" HorizontalContentAlignment="Stretch" VerticalAlignment="Bottom" VerticalContentAlignment="Bottom" Grid.ColumnSpan="3" Grid.Row="1" Grid.RowSpan="4" />
</StackPanel>
这个想法是,对于用户选择的dataGrid的每个单元格,他也可以通过其中的控件进行写入,我还没有找到这样做的方法。我希望你能帮助我,非常感谢。
解决方案
推荐阅读
- python - 如何同时运行 tkinter 应用程序和线程?
- java - 编写 SQLite 数据库查询以获取用户并传递表单用户表的正确方法是什么
- ios - 无法使用 jsonExport 和 Codeables 解码 json
- vba - MS Project VBA - 另存为与打开对话框选择器
- c# - 无法访问已释放的对象。\r\n对象名称: 'ApplicationUserManager'
- javascript - Laravel 循环遍历模型孩子而不重复
- php - Yii2 使用 yii2-formwizard 保存表格数据
- java - 为什么 Collections::addAll 比 ArrayList::addAll 慢但比 LinkedList::addAll 快?
- sql-server - 如何将聚集索引扫描转换为聚集索引搜索
- informatica-powercenter - 如何将值从一张表传递到映射变量或映射表达式?