使用多DataTable绑定之后,再次打开文件,请问如何获取数据源?
本帖最后由 冰岛 于 2023-5-24 16:58 编辑1、使用多DataTable绑定之后,再次打开文件,请问如何获取数据源?
2、下面是我使用2个DataTable绑定的代码,不知道是这个是不是最优的方式。
3、请问如何将标题行设置为不可编辑。
4、如何将多余的行和列都隐藏。(再不影响我继续添加行和列的情况下)
private void btnSetDataTable_Click(object sender, EventArgs e)
{
SetDataTable();
GrapeCity.Spreadsheet.IWorksheet TestActiveSheet = fpSpread1.AsWorkbook().ActiveSheet;
TestActiveSheet.AutoFilterMode = false;
GrapeCity.Spreadsheet.ITable table = TestActiveSheet.Range("A2:G7").CreateTable(true);
table.ShowAutoFilter = false;
table.AutoGenerateColumns = true;
table.DataSource = dt;
GrapeCity.Spreadsheet.ITable table2 = TestActiveSheet.Range("A20:D25").CreateTable(true);
table2.AutoGenerateColumns = true;
table2.DataSource = dt2;
}
1.表格本身并不保存数据源。所以正常来说,你应该是在退出时,循环获取每个table的数据源。自己进行保存。下次再设置回来
2代码没什么问题,AutoGenerateColumns 默认应该就是true不需要特别设置,如果是要分别设置每列绑的字段的话,可以再设置为false,然后通过代码设置绑定列
3“如何将标题行设置为不可编辑”--这个没什么特殊的设置办法。和此前版本一样,你可以选择设置单元格保护,来禁止编辑。或者可以通过开始编辑等事件来做判断
4.可以通过WorkSheet.UsedRange拿到使用的行列区域,然后对多余的行里设置隐藏 本帖最后由 冰岛 于 2023-5-25 14:34 编辑
Richard.Ma 发表于 2023-5-24 18:34
1.表格本身并不保存数据源。所以正常来说,你应该是在退出时,循环获取每个table的数据源。自己进行保存。 ...
1、再次打开保存的文件,那我如何获取fpSpread上设置的两个数据区域,并转为DataTable呢?(因为必须要获取到fpSpread上的数据,并且需要获取到对应列名称,像datatable.Rows这样,就可以把我需要的数据提取出来保存至数据库中了。)
2、我通过 fpSpread1.ActiveSheet.Rows.Locked = true; TestActiveSheet.Range(nRange).Locked = true;这两种设置后,行都还是可以编辑,唯有fpSpread1.ActiveSheet.Protect = true;设置后,整表将不可编辑,但这不是我想要的,我只想要列名称行不可编辑、还有就是数据行中前5列不可编辑。
3、我如何快速方便的指定一个区域的单元格隐藏呢?如图。
4、当设置了第一个DataTable数据源之后,想设置第二个数据源,如何获取第一个数据源已使用的行呢?即“A10:G11"”
我使用这种方式去创建,table2 就=NULL了,GrapeCity.Spreadsheet.ITable table2 = TestActiveSheet.Range(TestActiveSheet.UsedRange.CurrentRegion.ToString()).CreateTable(true)
5、如何将标题行第一列设置为复选框呢?并选择标题行复选框后,该组第一列都勾选?
6、我给DataTable添加了数据行,怎么让上面的数据自动添加数据行显示呢?
我的第二个数据源用控制行的方式显示了,但第一个数据源添加的数据行怎么应该去显示呢?
private void btnAddDataRow_Click(object sender, EventArgs e)
{
DataRow NewRow = dt.NewRow();
NewRow["true"] = true;
NewRow["记录模板编号"] = "1";
NewRow["证书模板编号"] = "1";
NewRow["记录编号"] = "2023400007";
NewRow["证书编号"] = "";
NewRow["委托单位"] = "测试7";
NewRow["证书类型"] = "校准证书";
NewRow["证书单位"] = "测试7";
NewRow["样品名称"] = "电子台秤";
NewRow["规格型号"] = "001";
NewRow["出厂编号"] = "002";
NewRow["制造厂家"] = "中星";
dt.Rows.Add(NewRow);
NewRow = dt2.NewRow();
NewRow["true"] = true;
NewRow["记录模板编号"] = "1";
NewRow["证书模板编号"] = "1";
NewRow["记录编号"] = "2023400007";
NewRow["证书编号"] = "";
NewRow["委托单位"] = "测试7";
NewRow["证书类型"] = "校准证书";
NewRow["证书单位"] = "测试7";
NewRow["样品名称"] = "电子台秤";
NewRow["规格型号"] = "001";
NewRow["出厂编号"] = "002";
NewRow["制造厂家"] = "中星";
dt2.Rows.Add(NewRow);
fpSpread1.ActiveSheet.Rows.Visible = true;
}
1.如果你就是要从table对应的单元格区域拿数据,那么可以通过tb.DataBodyRange拿到数据区域,然后循环遍历
2.locked和protect本身就是配合用的。你需要把允许编辑的区域locked设置为false
3.只能指定行或者列隐藏,区域是无法隐藏的,或者说你的具体需求是怎样的呢?
4.遍历table,获取range
for(int i=0;i< fpSpread1.AsWorkbook().ActiveSheet.Tables.Count;i++)
{
var tb = fpSpread1.AsWorkbook().ActiveSheet.Tables;
tb.Range
}
5,你可以尝试设置单元格类型,然后再cellclick事件中来判断,执行逻辑代码
6.没太明白你的意思, 本帖最后由 冰岛 于 2023-5-26 13:17 编辑
Richard.Ma 发表于 2023-5-25 19:00
1.如果你就是要从table对应的单元格区域拿数据,那么可以通过tb.DataBodyRange拿到数据区域,然后循环遍历
...
版主,我上传一个DEMO,麻烦版主帮我按问题帮我编辑一下代码看如何实现需求可以吗?非常感谢。我想达到的效果就是和视频一样就可以了。(我上传一个视频)
1、通过DEMO,设置“设置多表数据源”后“保存”,然后再“打开”,再“获取数据源”时,我需要获取到保存到文件的数据(需要包含列名称),转为DataTable.
2、按扭“设置多表数据源”最后三行代码是设置行不可编辑,但没起作用。需要设置多表数据的列名称行不可编辑。以及前3列的数据不可编辑。
3、快速方便的指定一个区域的单元格隐藏是指,当我设置多表数据后,当第二个表的数据列大于第一个表的时候,列数就会增加。需要把第一个数据行增加的单元格隐藏掉不可输入数据。具体表现是:按“设置多表数据源”后,数据区右上角会多出的空白单元格需要隐藏。
4、我在设置多表数据的时候,设置第二表数据时计算TestActiveSheet.Range(nRange).CreateTable(true);中的nRange时,使用的是
string nRange = "A" + (dt.Rows.Count + 2) + ":G" + (dt2.Columns.Count + 1);这种方式,我想有没有更好的获取前面已使用的数据区域的方式,而不是我这样硬加。在按扭“设置多表数据源”时,需要改善。
5、我设置了表第一列的单元格类型为CheckBox,但不知道怎么把列头也设置为CheckBox,列如"列A"我需要设置为复选框,并勾选后整个表格的第一列都选中。还有就是我需要当多表的时候,标题行第一列也设置为CheckBox,当选择后,将当前表的数据都选中(不是多表的数据都选中)。
6、使用按扭“设置多表数据源”后,再点击”添加数据行“按扭,我需要把添加到dt、dt2的数据,显示到对应区域。
7、如何对dt、dt2的数据分别进行排序?
可以,需要一些时间。预计明天给你结果 Richard.Ma 发表于 2023-5-29 09:36
可以,需要一些时间。预计明天给你结果
感谢版主。 不客气 Richard.Ma 发表于 2023-5-29 11:44
不客气
请问版主有消息了吗?感谢 早上我写好demo后发你
页:
[1]
2