目标是做一个动态的表格,表格中有一个可变的二维数组对应的TextBox[,] tb。
我把tb声明为静态全局变量,但提交的时候无法获取用户输入的值。---------------------aspx----简易代码如下:-------------------------------
<!--省略-->
<asp:dropdownlist id="ddlRow" runat="server" onSelectedIndexChanged = "selectRow"></asp:dropdownlist>
<asp:dropdownlist id="ddlCol" runat="server" onSelectedIndexChanged = "selectCol"></asp:dropdownlist>
<asp:table id="dynamicTable" runat="server"></asp:table>
<asp:button id="sbmt" runat="server" Text="提交" onClick="tbSubmit" />
<!--省略-->---------------------cs -----简易代码如下:-------------------------------
//省略
public appClass {
static TextBox[,] tb;
static int row, col;
protected void Page_Load(object sender, EventArgs e) {
//....
//获取行数和列数到row和col这两个变量中
//....
createTable(row, col);
}
protected void selectRow(object sender, EventArgs e) {
}
protected void selectCol(object sender, EventArgs e) {
}
protected void createTable(int row, int col) {
tb = new TextBox[row,col];
TableRow r;
TableCell c;
//添加表格行
for (int i = 0; i < row; i++) {
r = new TableRow();
//添加表格单元
for (int j = 0; j < col; j++){
c = new TableCell();
tb[i,j] = new TextBox();
c.Controls.Add(tb[i,j]);
r.Cells.Add(c);
}
DynamicTable.Rows.Add(r);
}
}
protected void tbSubmit(object sender, EventArgs e) {
// 遍历生成的TextBox控件的用户值。***结果全为""
// 监视DynamicTable.Rows.Count值为0 没有保存动态添加的行。
// ------------------鸿沟------------------------------
// 添加数据到数据库。
}
}
//省略
我把tb声明为静态全局变量,但提交的时候无法获取用户输入的值。---------------------aspx----简易代码如下:-------------------------------
<!--省略-->
<asp:dropdownlist id="ddlRow" runat="server" onSelectedIndexChanged = "selectRow"></asp:dropdownlist>
<asp:dropdownlist id="ddlCol" runat="server" onSelectedIndexChanged = "selectCol"></asp:dropdownlist>
<asp:table id="dynamicTable" runat="server"></asp:table>
<asp:button id="sbmt" runat="server" Text="提交" onClick="tbSubmit" />
<!--省略-->---------------------cs -----简易代码如下:-------------------------------
//省略
public appClass {
static TextBox[,] tb;
static int row, col;
protected void Page_Load(object sender, EventArgs e) {
//....
//获取行数和列数到row和col这两个变量中
//....
createTable(row, col);
}
protected void selectRow(object sender, EventArgs e) {
}
protected void selectCol(object sender, EventArgs e) {
}
protected void createTable(int row, int col) {
tb = new TextBox[row,col];
TableRow r;
TableCell c;
//添加表格行
for (int i = 0; i < row; i++) {
r = new TableRow();
//添加表格单元
for (int j = 0; j < col; j++){
c = new TableCell();
tb[i,j] = new TextBox();
c.Controls.Add(tb[i,j]);
r.Cells.Add(c);
}
DynamicTable.Rows.Add(r);
}
}
protected void tbSubmit(object sender, EventArgs e) {
// 遍历生成的TextBox控件的用户值。***结果全为""
// 监视DynamicTable.Rows.Count值为0 没有保存动态添加的行。
// ------------------鸿沟------------------------------
// 添加数据到数据库。
}
}
//省略
{
asdf+=this.Controls['TextBox'+i]}
或者如何才能让我所声明的tb[i,j]能像普通页面中定义的<asp:textbox id="common" /> 一样不管页面如何
刷新,都能在需要的时候通过common.Text来获得用户数据?
{
value+=(this.FindControl['TextBox'+i]).text;
}
for (int i=0,i <row-1,i++)
{
value+=(this.FindControl['TextBox'+i]).text;
}
"的朋友是建议我把它加到什么地方呢?
如果加在提交函数中,那也要先运行page_load函数,用户数据还是被置位,不是吗?
通过isPostback来判断
第一次访问初始化这些控件,第二次直接取。if (!IsPostBack)
{
createTable(row, col);
}
else
{
for (int i=0,i <row-1,i++)
{
value+=(this.FindControl['TextBox'+i]).text;
}
}
FindControl是函数,不能使用[],改为()、把单引号改为双引号、把i改为i.ToString()后也是运行时错误。
但,好像最关键的还是不能回到page_load这个函数。因为我直接停在它的入口,使用调试工具
中的“监视”来查看this.FindControl("TextBox" + i),结果都是null;另外我自己定义的
二维数组的对象都还在,但仿佛没有接受过用户的输入。另外,无意冒犯的问一问,8楼的朋友是否有亲自运行调试过,还是只是简单的理解一下就来帮忙呢?时间宝贵,如果有高手知道如何解决的话,就请帮忙具体明白的说明一下吧。
然后点提交时,使用onclientclick在这个里面来处理用户填写的数据,使用固定的分隔符把所有数据相加起来,
然后赋值给Hidden,然后在服务器分隔Hidden的值。
如果想用这个方法还有其它问题,Please Send me a message!