佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

楼主: shinelynn

.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.

应该怎么写才对?
回复

使用道具 举报


ADVERTISEMENT

发表于 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;
        //}
}
回复

使用道具 举报

Follow Us
 楼主| 发表于 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... 没遇到什么问题.
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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 | 显示全部楼层
原帖由 goatstudio 于 31-8-2006 11:59 PM 发表


你的理解没错.
这些其实不难, 真正的恶梦在很多 textbox 下进行 postback, 任何一种 postback, 那时候你才会叫苦连天.


啊~~不会叫苦连天啦,借你的程序抄一抄就行了。

很生气。。很生气。。我借来的Ms Office有问题,有installer没有product key。。Ms Access读不到。啊,很心急想试,刚回到家连觉都不睡就来弄这系统,哪里知道。。。

火滚中。。
回复

使用道具 举报

 楼主| 发表于 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的问题。。
回复

使用道具 举报


ADVERTISEMENT

发表于 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"就可以了。。

谢谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 21-9-2025 03:21 AM , Processed in 0.130693 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表