页面有10个TextBox分别是:TextBox1,TextBox2,TextBox3......TextBox10
DataTable中有最多10条数据,如何通过循环实现,DataTable中有几条数据就给几个TextBox赋值呢?谢谢... DataTable tb = ds.Tables[0];
            int t = tb.Rows.Count;
            for (int i =0; i < t;i++ )
            {
                
                    //这里应该怎么写呢?要达到的效果是有tb中有几条数据就给几个TextBox赋值
                    //TextBox1 对应 tb.Rows[1]["ItemName"].ToString();
                    //TextBox2 对应 tb.Rows[2]["ItemName"].ToString();依次类推...
            }

解决方案 »

  1.   


      DataTable tb = ds.Tables[0];
      int t = tb.Rows.Count;
      if(t>0)
      {
          for (int i =0; i < t;i++ )
          {
               ((TextBox)this.FindControl("TextBox" + i.ToString())).Text = tb.Rows[1]["ItemName"].ToString();
          }
       }
      

  2.   

    更正一下:DataTable tb = ds.Tables[0];
      int t = tb.Rows.Count;
      if(t>0)
      {
          for (int i =0; i < t;i++ )
          {
               ((TextBox)this.FindControl("TextBox" + i.ToString())).Text = tb.Rows[i]["ItemName"].ToString();
          }
       }
      

  3.   

    To:暖风无敌。
    你的方法报错啊:Object reference not set to an instance of an object.
      

  4.   

    ((TextBox)this.FindControl("TextBox" + i.ToString())).Text = tb.Rows[i]["ItemName"].ToString();=>
    TextBox txt;
    txt =this.FindControl("TextBox" + i.ToString());
    if(txt!=null)
    {
    txt.Text = tb.Rows[i]["ItemName"].ToString();
    }
      

  5.   

    本帖最后由 Sandy945 于 2011-10-28 10:06:52 编辑
      

  6.   

    DataTable tb = ds.Tables[0];
      int t = tb.Rows.Count;
      if(t>0)
      {
          for (int i =0; i < t;i++ )
          {
               ((TextBox)this.FindControl("TextBox" + i.ToString())).Text = tb.Rows[i]["ItemName"].ToString();
          }
       }
    改为DataTable tb = ds.Tables[0];
      int t = tb.Rows.Count;
      if(t>0)
      {
          for (int i =1; i < t;i++ )
          {
               ((TextBox)this.FindControl("TextBox" + i.ToString())).Text = tb.Rows[i]["ItemName"].ToString();
          }
       }
      

  7.   

    你的TextBox1是第一个,将下面的i+1就行了。  DataTable tb = ds.Tables[0];
      int t = tb.Rows.Count;
      if(t>0)
      {
          for (int i =0; i < t;i++ )
          {
               ((TextBox)this.FindControl("TextBox" + (i+1).ToString())).Text = tb.Rows[i]["ItemName"].ToString();
          }
       }
      

  8.   

    To:阿非:
    txt一直获取不到,为Null。但界面上肯定有 TextBox1,TextBox2,TextBox3......
      

  9.   


    要确定你的TextBox的ID是什么格式的,报错的应该是:
    ((TextBox)this.FindControl("TextBox" + i.ToString())).Text = tb.Rows[i]["ItemName"].ToString();FindControl里边是TextBox的ID名称。
      

  10.   

    To:暖枫无敌 
    这个改过了,不行的....txt 获取不到,但界面上肯定有 TextBox1,TextBox2,TextBox3......
      

  11.   

    <div id="TextBoxs" runat="server">
    <asp:TextBox ID="com1" runat="server" ></asp:TextBox>
    <asp:TextBox ID="com2" runat="server" ></asp:TextBox>
    <asp:TextBox ID="com2" runat="server" ></asp:TextBox>
    </div>
    假如数据库中字段comname的存储方法为:"图片,图书,教程"中间有豆号
    string[] comArray=dr["comname"].tostring().split(',');
    foreach(int i = 0;i<comArray.Lenth;i++)
    {
    ((TextBox)this.TextBoxs.FindControl("com"+(i+1).tostring())).text=comArray[i].tostring();
    }
      

  12.   


    this.TextBoxs.FindContro
      

  13.   

    你的那个ds有没有数据啊,不是本身是null值吧?还有你页面上有TextBox1,...的控件嘛?
      

  14.   

    注意:在使用FindControl时,一定要在最贴近查找对象的外边加上个容器,如果你直接用this.FindControl,或Page.FindControl那么就会经常出现未将对象设置到实例的错误,所以最好加一个容器,那么这里加的DIV就是一个容器,为了让FindControl在ID为"TextBoxs"的DIV内去找名为com1,com2,com3的TextBOx;
      

  15.   

    前台代码:
            <table>
                    <tr>
                        <td>
                            投票主题:
                        </td>
                        <td>
                            <asp:TextBox ID="txtTitle" runat="server" Width="400px" Height="30px"></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            主题描述:</td>
                        <td>
                            <asp:TextBox ID="txtContent" runat="server" Width="400px" Height="50px" TextMode="MultiLine"></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            投票项目1:
                        </td>
                        <td>
                            <asp:TextBox ID="txtItem1" runat="server" Width="300px" ></asp:TextBox>
                        </td>
                    </tr>
                     <tr>
                        <td>
                            投票项目2:
                        </td>
                        <td>
                            <asp:TextBox ID="txtItem2" runat="server" Width="300px" ></asp:TextBox>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            投票项目3:
                        </td>
                        <td>
                            <asp:TextBox ID="txtItem3" runat="server" Width="300px" ></asp:TextBox>
                        </td>
                    </tr>                <tr>
                        <td>
                            投票项目4:
                        </td>
                        <td>
                            <asp:TextBox ID="txtItem4" runat="server" Width="300px" ></asp:TextBox>
                        </td>
                    </tr>                <tr>
                        <td>
                            投票项目5:
                        </td>
                        <td>
                            <asp:TextBox ID="txtItem5" runat="server" Width="300px" ></asp:TextBox>
                        </td>
                    </tr>                <tr>
                        <td>
                            投票项目6:
                        </td>
                        <td>
                            <asp:TextBox ID="txtItem6" runat="server" Width="300px" ></asp:TextBox>
                        </td>
                    </tr>                <tr>
                        <td>
                            投票项目7:
                        </td>
                        <td>
                            <asp:TextBox ID="txtItem7" runat="server" Width="300px" ></asp:TextBox>
                        </td>
                    </tr>                <tr>
                        <td>
                            投票项目8:
                        </td>
                        <td>
                            <asp:TextBox ID="txtItem8" runat="server" Width="300px" ></asp:TextBox>
                        </td>
                    </tr>                <tr>
                        <td>
                            投票项目9:
                        </td>
                        <td>
                            <asp:TextBox ID="txtItem9" runat="server" Width="300px" ></asp:TextBox>
                        </td>
                    </tr>                <tr>
                        <td>
                            投票项目10:
                        </td>
                        <td>
                            <asp:TextBox ID="txtItem10" runat="server" Width="300px" ></asp:TextBox>
                            <a href="#" onclick="AddItem" >+增加项目</a>
                        </td>
                        
                    </tr>
                    <tr>
                        <td colspan="2">
                            <br />
                            <asp:Button ID="btnSubmit" runat="server" Text="确定" CssClass="btnBlue" OnClick="btnSubmit_Click" Height="30px" Width="80px" />
                        </td>
                    </tr>
                </table>后台代码:----------------------------------------------------------------
    protected void BindModel()
        {
            SMSBusinessPlatform.Model.Votes m=new SMSBusinessPlatform.Model.Votes ();
            m.VoteId=VoteId;
            DataSet ds=bllVote.GetListWithItem(m);
            if (DataSetHelper.IsExistDate(ds))
            {
                DataTable tb = ds.Tables[0];
                int t = tb.Rows.Count;
                TextBox txt;
                for (int i =0; i < t;i++ )
                {
                    int tt = i + 1;
                    string ItemName= tb.Rows[i]["ItemName"].ToString();
                    txt = (TextBox)this.FindControl("txtItem" + tt.ToString());
                    if (txt != null)
                    {
                        txt.Text = tb.Rows[i]["ItemName"].ToString();
                    }
                }
            }
        }阿非费心了....
      

  16.   

    string[] comArray=dr["comname"].tostring().split(',');
    foreach(int i = 0;i<comArray.Lenth;i++)
    {
    ((TextBox)this.TextBox.FindControl("com"+(i+1).tostring())).text=comArray[i].tostring();
    }没有那个s
      

  17.   

    To:暖枫无敌 
    DataSet中肯定有数据的...
      

  18.   

    BindModel 这个方法是在 btnSubmit 的点击事件中执行的么?你看下页面生成的源文件,右键查看
      

  19.   


    如果TextBox和绑定程序一个在母版页,另一个在aspx页就不能这样找了。
      

  20.   

    参考:Master.FindControl("ContentPlaceHolder1").FindControl("txtItem")
      

  21.   

    刚才写的不规范,测试通过vs2005,不适用模板页情况下<div id="TextBoxs" runat="server">
    <asp:TextBox ID="com1" runat="server" ></asp:TextBox>
    <asp:TextBox ID="com2" runat="server" ></asp:TextBox>
    <asp:TextBox ID="com3" runat="server" ></asp:TextBox>
    </div> void Page_Load(object sender, System.EventArgs e)
        {
          
            for (int i = 1; i < 4;i++ )
            {
                ((TextBox)this.TextBoxs.FindControl("com"+i.ToString())).Text ="sds";
            }
        }
      

  22.   

    源代码的真实Id是这样的:ctl00_ctl00_ContentPlaceHolder1_main_txtItem1,ctl00_ctl00_ContentPlaceHolder1_main_txtItem2,.....
    我改了成这个也是找不到txt
      

  23.   

    是母板页的话,将this换成((MasterPage)Master)试试。
    protected void BindModel()
        {
            SMSBusinessPlatform.Model.Votes m=new SMSBusinessPlatform.Model.Votes ();
            m.VoteId=VoteId;
            DataSet ds=bllVote.GetListWithItem(m);
            if (DataSetHelper.IsExistDate(ds))
            {
                DataTable tb = ds.Tables[0];
                int t = tb.Rows.Count;
                TextBox txt;
                for (int i =0; i < t;i++ )
                {
                    int tt = i + 1;
                    string ItemName= tb.Rows[i]["ItemName"].ToString();
                    txt = (TextBox)((MasterPage)Master).FindControl("txtItem" + tt.ToString());
                    if (txt != null)
                    {
                        txt.Text = tb.Rows[i]["ItemName"].ToString();
                    }
                }
            }
        }
      

  24.   

    To:暖枫无敌
    我改成如下,还是不行。难道和我使用的两层母版页有关吗?
    txt = (TextBox)((MasterPage)Master).FindControl("txtItem" + tt.ToString());
      

  25.   

    控件在母版页上,在引用模板页面的操作 for (int i = 1; i < 4; i++)
            {
                ((TextBox)this.Page.Master.FindControl("TextBoxs").FindControl("com" + i.ToString())).Text = "sds";
            }
      

  26.   

    To阿非:
    上层母版页结构<%@ MasterType  virtualPath="~/Templates/temp1/main.master"%> 
    <%@ Master Language="C#" MasterPageFile="~/Templates/temp1/main.master" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="Templates_temp1_SNS_MasterPage" %><%@ Register src="UserControls/LeftAPP.ascx" tagname="LeftAPP" tagprefix="uc1" %>
      
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <table width="1002" border="0" cellspacing="0" cellpadding="0" align="center" >
      <tr>
      <td>
       <div id="container">        
        <div id="app_bar">
            <uc1:LeftAPP ID="LeftAPP1" runat="server" />
        </div>
        <div id="container_content">
         <asp:ContentPlaceHolder ID="main" runat ="server" >     </asp:ContentPlaceHolder>
         </div>
        </div>
      </td>
        </tr>
    </table>
       
    </asp:Content>
      

  27.   

    顶层母版页结构:<%@ Master Language="C#" AutoEventWireup="true" CodeFile="main.master.cs" Inherits="main" %><%@ Register Src="UserControl/Footer.ascx" TagName="Footer" TagPrefix="uc2" %>
    <%@ Register Src="UserControl/Header.ascx" TagName="Header" TagPrefix="uc1" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>网织钢铁商机平台</title>
        <link rel="shortcut icon" href="../../favicon.ico" />
        <link href="css/css.css" rel="stylesheet" />
        <link rel="stylesheet" type="text/css" href="../../Css/smoothness/jquery-ui-1.8.16.custom.css" />
        <link rel="stylesheet" type="text/css" href="../../App_Themes/Theme1/Controls.css" />
    </head>
    <body>
        <script type="text/javascript" src="<%= Page.ResolveUrl("~/Scripts/jquery-1.4.2.min.js") %>"></script>
        <script type="text/javascript" src="<%=Page.ResolveUrl("~/Scripts/jquery-ui-1.8.16.custom.min.js") %>"></script>
        <script type="text/javascript" src="<%=Page.ResolveUrl("~/Scripts/jquery.waterinput.js") %>"></script>
        <script type="text/javascript" src="<%=Page.ResolveUrl("~/Scripts/Jquery-ui-Datepicker.js") %>"></script>    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <uc1:Header ID="Header1" runat="server" />
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
        <uc2:Footer ID="Footer1" runat="server" />
        <!--放在上面不起效果,所以放在底部-->
        <style>
            fieldset
            {
                padding: 10px;
                margin-top: 5px;
                border: 1px solid #1E7ACE;
                background: #fff;
            }
            fieldset legend
            {
                color: #1E7ACE;
                font-weight: bold;
                padding: 3px 20px 3px 20px;
                border: 1px solid #1E7ACE;
                background: #fff;
            }
           
        </style>
        <!--放在上面不起效果,所以放在底部-->
        </form>
    </body>
    </html>
      

  28.   

    不用贴这么细主要说明 TextBox 在什么位置调用的方法在什么位置就行
      

  29.   

    To:阿非
    我晕.
    TextBox  
    <asp:ContentPlaceHolder ID="main" runat ="server" ></asp:ContentPlaceHolder> 这个容器里面
      

  30.   

    BindModel 方法在那个页面呢
      

  31.   

    BindModel 方法在那个页面呢?
    ----------------------------------
    在内容页...
      

  32.   

    TO:一轮明月照我心
    加过容器了,但是取不到TextBox...
      

  33.   

    我加了容器的:
    txt = (TextBox)((MasterPage)Master).FindControl("main").FindControl("txtItem" + tt.ToString());
    txt为空..
      

  34.   


    TextBox txt;           for (int i =0; i < tb.Rows.Count;i++ )
                {              
                    string ItemName= tb.Rows[i]["ItemName"].ToString();
                    txt = Master.FindControl("main").FindControl("txtItem" + (i+1).ToString()) as TextBox;                if (txt != null)
                    {
                        txt.Text = ItemName;
                    }
                }
      

  35.   

    因为我是嵌套了两层母版页。所以找时要一层一层的找。
    最后的代码如下:
     txt = Master.Master.FindControl("ContentPlaceHolder1").FindControl("main").FindControl("txtItem" + (i + 1).ToString()) as TextBox;
      

  36.   

    这个可以用脚本操作dom 文档,获取~~~