|
.net 求救 (Server.MapPath)
[复制链接]
|
|

楼主 |
发表于 29-8-2006 09:57 AM
|
显示全部楼层
我有10个同样的field,可是我不想create10个text box manually,
<asp:textbox id="txtDesc1" runat="server" ></asp:textbox>
<asp:textbox id="txtDesc2" runat="server" ></asp:textbox>
<asp:textbox id="txtDesc3" runat="server" ></asp:textbox>
.
.
.
于是我想用array来create,我把这code放在.aspx里,
<%
int n = 0;
while (n<11)
{
TextBox[] txtDesc = new TextBox[10];
%>
<TR>
<TD><%=n%>.</TD>
<TD><asp:textbox id="<%=txtDesc[n]%>" runat="server"></asp:textbox></TD>
</TR>
<%
n = n + 1;
}
%>
“n”可以display,可是<%=txtDesc[n]%>就有问题了。
Parser Error Message: '<%=txtDesc[n]%>' is not a valid identifier.
应该怎么写才对? |
|
|
|
|
|
|
|
发表于 29-8-2006 10:01 AM
|
显示全部楼层
txtDesc 的种类是 TextBox 不是 string... 怎么可以 assign 去 id 呢?
另外... 建议你用 code behind 来这么做. |
|
|
|
|
|
|
|

楼主 |
发表于 29-8-2006 10:24 AM
|
显示全部楼层
原帖由 goatstudio 于 29-8-2006 10:01 AM 发表
txtDesc 的种类是 TextBox 不是 string... 怎么可以 assign 去 id 呢?
另外... 建议你用 code behind 来这么做.
对我就是发现错误了进来改。。
错误1 - 我不可以把TextBox[]放进while里面
错误2 - txtDesc[n]是text box来的,我不可以把text box assign给另一个text
box啊。。text box ID应该是string来的。。
所以我把code改了。。
<%
int n = 0;
string strTextBox = "";
while (n<10)
{
strTextBox = "txtDesc[" + (string)n + "]";
%>
<TR>
<TD><%=n%>.</TD>
<TD><asp:textbox id="<%=strTextBox%>" runat="server"></asp:textbox></TD>
</TR>
<%
n = n + 1;
}
%>
Parser Error Message: '<%=strTextBox%>' is not a valid identifier.
不想用code behind因为我要把那些text box放进一个table里面,然后放在某个位子。。用code,我不知道要怎么把它们放进table然后fix在我要的地方。不知道可不可以把这些text box放进一个function里,然后在.aspx里在我要的地方call这function,不知道行吗。。
我想把text box id = txtDesc[n]因为我在sql做insert时也不用做10次的insert sql
statement,用while就可以了。。
[ 本帖最后由 shinelynn 于 29-8-2006 10:27 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 29-8-2006 01:48 PM
|
显示全部楼层
为什么要把你的 strTextBox 里的 value 写成好象 array?
其实很简单而已... 我做过类似的但不是这样做. 我用 code behind, 你可以选择 code behind 或是把 code 放在 aspx 里.
你只要在 html 那里这样写:
<asp:table ID="TableGrid" />
那么你在 code 里可以直接呼叫 TableGrid 来制作 row, column, 的 textbox. |
|
|
|
|
|
|
|

楼主 |
发表于 29-8-2006 03:19 PM
|
显示全部楼层
原帖由 goatstudio 于 29-8-2006 01:48 PM 发表
为什么要把你的 strTextBox 里的 value 写成好象 array?
其实很简单而已... 我做过类似的但不是这样做. 我用 code behind, 你可以选择 code behind 或是把 code 放在 aspx 里.
你只要在 html 那里这样写:
...
我要写成array是因为比方说
int n = 0;
while (n<0)
{
txtDesc[n].Text = "Testing";
n = n + 1;
}
假如不要写成array的话,我不知道code behind要用while的话有什么方法才能把value assign给每个text box ?
噢,对噢,怎么没想到你的方法?哎呀,我才刚做过类似的东西,可是是datagrid的,用code manually add column,为什么没想到这个也可以这么做呢。。
谢谢,我试试看。 |
|
|
|
|
|
|
|

楼主 |
发表于 29-8-2006 05:59 PM
|
显示全部楼层
救命啊。。我可以用code create到table了,可是我只能create到一行,假如我把while uncomment掉,就不可以了,我是不是太懒惰了,连create个table也要用loop。。
private void LoadTable()
{
TableCell myCell = new TableCell();
TableRow myRow = new TableRow();
TextBox txtDesc = new TextBox();
//int n = 0;
//while (n<10)
//{
txtDesc.ID = "txtDesc";// + n.ToString();
txtDesc.Text = "txtDesc";// + n.ToString();
myCell.Controls.Add(txtDesc);
myRow.Cells.Add(myCell);
tblDetail.Rows.Add(myRow);
myCell = null;
myRow = null;
// n = n + 1;
//}
} |
|
|
|
|
|
|
|

楼主 |
发表于 29-8-2006 06:28 PM
|
显示全部楼层
噢,知道了,要在loop时才create new object。
private void LoadTable()
{
int n = 0;
while (n<10)
{
TableRow myRow = new TableRow();
tblDetail.Rows.Add(myRow);
TableCell myCell = new TableCell();
TextBox txtDesc = new TextBox();
txtDesc.ID = "txtDesc" + n.ToString();
myCell.Controls.Add(txtDesc);
myRow.Cells.Add(myCell);
n = n + 1;
}
}
可是我想到了另一个问题的出现。。
这些text box是manually create的,所以并没有define as System.Web.UI.WebControls.TextBox, 要是我要在一个button on click时get这些text box的value时,不就有问题了?因为它找不到那些text box啊?
啊~~~~~ 真想一个一个create算了。。可是有点不甘心。。 |
|
|
|
|
|
|
|
发表于 29-8-2006 08:25 PM
|
显示全部楼层
原帖由 shinelynn 于 29-8-2006 06:28 PM 发表
噢,知道了,要在loop时才create new object。
private void LoadTable()
{
int n = 0;
while (n<10)
{
TableRow myRow = new TableRow();
tblDetail.Rows.Add(myRow);
TableCell myCell ...
不太明白你要说什么...
尤其是 "这些text box是manually create的,所以并没有define as System.Web.UI.WebControls.TextBox"
没有 define as TextBox... 你那里来的 TextBox?
因 GUI 需要, 我以前用这方法在一个 page 做了百多个 textbox... 没遇到什么问题. |
|
|
|
|
|
|
|

楼主 |
发表于 29-8-2006 10:19 PM
|
显示全部楼层
原帖由 goatstudio 于 29-8-2006 08:25 PM 发表
不太明白你要说什么...
尤其是 "这些text box是manually create的,所以并没有define as System.Web.UI.WebControls.TextBox"
没有 define as TextBox... 你那里来的 TextBox?
因 GUI 需要, ...
我的意思是说,假如我要在另一个function get这些text box的value,可以吗?因为通常我们在.aspx里create text box的话,.aspx.cs就会define protected System.Web.UI.WebControls.TextBox.txtDesc,那么在code behind任何一个function都可以get到txtDesc的attribute比方说 txtDesc.Text。
可是这些text box只是在我load table function时create的,它们是不是只限制于这个load table里才可以找得到txtDesc.Text?是不是我在任何一个别的event里,也一样可以得到那txtDesc.Text?
就比如string,假如这样写的话,Test2就会有问题因为"a"是define另一个Test1里面,所以没办法拿到"a"的value,
private function Test1()
{
string a = "123";
}
private function Test2()
{
lblMsg.Text = a;
}
这我只是"想"到而已,刚才没时间试,不知道到底有没有问题,还是我想太多了?是不是只要我在page load时call到这个load table的function,就没问题了?
哦,还有想问你,你有1百个text field,假如说你要把每一个text field储进database,要是没用array,你怎么做?
因为我的一直旋转在array,脑筋转不过来,
while( n < 100)
{
...
strSql = "INSERT INTO TBLXXX VALUES('" + txtDesc[n].txt + "'";
...
}
应该怎么写才对? |
|
|
|
|
|
|
|
发表于 30-8-2006 03:25 PM
|
显示全部楼层
当你在 function 里 create 一个 textbox, 基本上还是同样的 textbox 的种类.
例如说:
void CreateRow () {
TextBox MyTextBox = new TextBox();
MyTableRow.Cells[0].Controls.Add (MyTextBox);
}
当你要找回你的 textbox, 就只要靠这样的次序: Table -> Row -> Cell -> Control 就可以拿到了... 例如说:
string result = ((TextBox)MyTable.MyRow[0].MyCell[0].Controls[0]).Text;
这样的话, 是否明白些呢? 也就不用把 TextBox 的ID 放成 array 的样子了. 把 name 放成 array 的样子是 php 的做法呢.
[ 本帖最后由 goatstudio 于 30-8-2006 03:27 PM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 31-8-2006 08:21 PM
|
显示全部楼层
原帖由 goatstudio 于 30-8-2006 03:25 PM 发表
当你在 function 里 create 一个 textbox, 基本上还是同样的 textbox 的种类.
例如说:
void CreateRow () {
TextBox MyTextBox = new TextBox();
MyTableRow.Cells.Controls.Add (MyTextBox);
}
...
噢,我明白了,((TextBox)MyTable.MyRow[0].MyCell[0].Controls[0])就是第一个row第一个cell第一个textbox control; (TextBox)MyTable.MyRow[0].MyCell[0].Controls[1])是第一个row第一个cell的第二个textbox control。。(应该是这样吧?不是的话请纠正我)
好,过两天试试看,这两天让脑袋放放假。。真的很谢谢,学了很多。。(相信还有更多,呵呵,接下来应该是学习用系统来寄电邮了。。) |
|
|
|
|
|
|
|
发表于 31-8-2006 11:59 PM
|
显示全部楼层
原帖由 shinelynn 于 31-8-2006 08:21 PM 发表
噢,我明白了,((TextBox)MyTable.MyRow.MyCell.Controls)就是第一个row第一个cell第一个textbox control; (TextBox)MyTable.MyRow.MyCell.Controls)是第一个row第一个cell的第二个textbox control。。(应该 ...
你的理解没错.
这些其实不难, 真正的恶梦在很多 textbox 下进行 postback, 任何一种 postback, 那时候你才会叫苦连天.  |
|
|
|
|
|
|
|

楼主 |
发表于 2-9-2006 11:38 PM
|
显示全部楼层
|
|
|
|
|
|
|

楼主 |
发表于 4-9-2006 03:48 PM
|
显示全部楼层
奇怪,不知道为什么行不通。。
if (dr["ncmr_t_h_fr"].ToString() == "1")
{
rbFr1.Checked = true;
}
else if (dr["ncmr_t_h_fr"].ToString() == "2")
{
rbFr2.Checked = true;
}
else if (dr["ncmr_t_h_fr"].ToString() == "3")
{
rbFr3.Checked = true;
}
dr是我的datarow来,我想retrieve要是“ncmr_t_h_fr”是“1”的话,就check rbFr1,“2”的话,就check rbFr2,“3”的话就check rbFr3,这3个radio button都是同一个group的。
我试把dr["ncmr_t_h_fr"]放进一个text box,没问题我可以拿到value,可是这radio button,怎么不行呢? |
|
|
|
|
|
|
|
发表于 4-9-2006 05:50 PM
|
显示全部楼层
原帖由 shinelynn 于 4-9-2006 03:48 PM 发表
奇怪,不知道为什么行不通。。
if (dr.ToString() == "1")
{
rbFr1.Checked = true;
}
else if (dr.ToString() == "2")
{
rbFr2.Checked = true;
}
else if (dr.ToString() == ...
不妨尝试用 CompareTo 的 method. |
|
|
|
|
|
|
|

楼主 |
发表于 4-9-2006 06:18 PM
|
显示全部楼层
原帖由 goatstudio 于 4-9-2006 05:50 PM 发表
不妨尝试用 CompareTo 的 method.
噢。。我待会儿看看compareto是怎么用的。可是我已经知道为问题的发生了,coding没
错,是database的问题,可是我也是不知道怎么解决。。
这ncmr_t_h_fr的size是char(2),当我insert进table时,就算insert的只是"1",
"2","3",它会变成"1 ","2 ","3 ", 都auto加了一个space在后面。每一个field都
这样,假如一个field的size是Char(20),我的data是"AB",insert进table时,就
会变成"AB "

就算在insert时把data trim了,还是一样。。我唯有在retrieve data时才用trim,
可以了。。
if (dr["ncmr_t_h_fr"].ToString().Trim() == "1")
{
rbFr1.Checked = true;
}
else if (dr["ncmr_t_h_fr"].ToString().Trim() == "2")
{
rbFr2.Checked = true;
}
else if (dr["ncmr_t_h_fr"].ToString().Trim() == "3")
{
rbFr3.Checked = true;
}
虽然是可以了,还是想解决这个database的问题。。 |
|
|
|
|
|
|
|
发表于 5-9-2006 01:31 AM
|
显示全部楼层
这种情况很奇怪... Access 一般不会这样... 你的 field type 应该是 Text, 为什么会是 char 呢? |
|
|
|
|
|
|
|

楼主 |
发表于 5-9-2006 07:52 AM
|
显示全部楼层
原帖由 goatstudio 于 5-9-2006 01:31 AM 发表
这种情况很奇怪... Access 一般不会这样... 你的 field type 应该是 Text, 为什么会是 char 呢?
噢,我是用query来create table的,因为太多field了,用query比较快,
create table_abc(
field_a Char(2),
field_b Double(16,2),
field_c Char(5)
)
create了之后,我在table那里看char的field都变成text了,所以以为没问题。用
query create的话,用"text"好像是行不通的?
我待会儿试试看删掉一个field,然后manually加回。。 |
|
|
|
|
|
|
|
发表于 5-9-2006 08:49 AM
|
显示全部楼层
原帖由 shinelynn 于 5-9-2006 07:52 AM 发表
噢,我是用query来create table的,因为太多field了,用query比较快,
create table_abc(
field_a Char(2),
field_b Double(16,2),
field_c Char(5)
)
create了之后,我在table那里看char的field都 ...
Access 里只有 Text. 
你可以尝试用 varchar 来替代你的 char.  |
|
|
|
|
|
|
|

楼主 |
发表于 6-9-2006 09:30 AM
|
显示全部楼层
试用varchar create,也是一样。
其实是用query create的关系,要是用query create,field的"Unicode Compression"是"No"的,"No"的话每当insert data时,它会把space加进data里头直到field的full length。。改去"Yes"就可以了。。
谢谢。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|