第一个,如何点击一个linkButton,动态的添加textbox的控件(数目不确定),添加后如何取出textbox的值,思路我会,但不知道具体代码怎么写,会的帮忙写段代码吧第二个,绑定DROPDOWNLIST后的问题
我的代码:SqlDataReader sdr = SqlHelper.executeReader("select * from table",);
        this.ddlDent.DataSource = sdr;
        this.ddlDent.DataTextField = "DentName";
        this.ddlDent.DataValueField = "DentID";
        this.ddlDent.DataBind();
        this.ddlDent.Items.Insert(0, new ListItem("--请选择--", "0"));
显示是显示成功了,但是如果用户不选择内容项,也就是说选择了默认的new ListItem("--请选择--", "0"),而没有选择下拉列表的项,就会产生错误(这个dropdownlist的ID是一个表的主键,所以没有"0"这一项)
请问,怎么写一段代码,如果用户不选择其中的项,就警告用户没有选择呢?我用了custmovalidator做,可是没成功,会的写下代码吧,谢谢了解决好了我会给看情况给各位加分的

解决方案 »

  1.   

    问题一:<form id="Form1" method="post" runat="server">
    <FONT face="宋体">
    <P>
    <asp:LinkButton id="LinkButton1" runat="server">添加</asp:LinkButton></P>
    <P>
    <asp:Table id="Table1" runat="server"></asp:Table></P>
    </FONT>
    <asp:Button id="Button1" runat="server" Text="取值"></asp:Button>
    </form>
    private void LinkButton1_Click(object sender, System.EventArgs e)
    {
    AddTextBox(10);
    }
    private void Button1_Click(object sender, System.EventArgs e)
    {
    AddTextBox(10);
    string strResult=string.Empty;
    ListControls(this,ref strResult);
    Response.Write(strResult);
    }
    /// <summary>
    /// 返回控件中的值
    /// </summary>
    /// <param name="page"></param>
    /// <param name="strResult"></param>
    private void ListControls(System.Web.UI.Control page,ref string strResult)

    foreach (System.Web.UI.Control control in page.Controls)
    {
    if (control.HasControls())
    {
    ListControls(control,ref strResult);
    }
    if (control is TextBox)
    {
    if ((control as TextBox).ID.Substring(0,8)=="TextBox_")//如果是动态添加的
    {
    strResult=strResult+","+(control as TextBox).Text;
    }
    }
    }
    }
    private void AddTextBox(int iCount)
    {
    for (int i= 0 ;i<iCount;i++)
    {
    TextBox tb = new TextBox();
    tb.ID="TextBox_"+i.ToString();
    tb.Text=i.ToString();
    TableRow tr = new TableRow();
    TableCell tc = new TableCell();
    tc.Controls.Add(tb);
    tr.Cells.Add(tc);
    Table1.Rows.Add(tr);
    }
    }问题2:
    邦定之后给一个默认选中的项。
    SqlDataReader sdr = SqlHelper.executeReader("select * from table",);
    this.ddlDent.DataSource = sdr;
    this.ddlDent.DataTextField = "DentName";
    this.ddlDent.DataValueField = "DentID";
    this.ddlDent.DataBind();
    this.ddlDent.Items.Insert(0, new ListItem("--请选择--", "0"));
    this.ddlDent.SelectedItem.Selected=false;
    this.ddlDent.Items[0].Selected=true;
      

  2.   

    if(ddlDent.SelectedItem.Text=="--请选择--")
    {
      Response.Write("<script langrage=javascript>alert('清选择');</script>");
      return;
    }
    或者用验证控件
      

  3.   

    这样该叫服务器端验证吧,是否有办法像RequiredFieldValidator一样进行客服端和服务器端都进行验证,这样的话,如果客服端不行就没有必要进行服务器端验证。请指教.
      

  4.   

    function check()
    {
    if(document.getElementById('ddlDent').value==0)
    {alert('qingcuanze');
    return false;}
    }
      

  5.   

    动态添加,最好用JS来实现,给一个我写的吧,
    <script language="javascript" type="Text/javascript">
    //动态添加工序
    //添加一个div,并在div放控件
    function AddProcessDiv()
    {
        var parentDiv=document.getElementById('parentDiv');
        var childDiv=document.createElement("div");
        var i=parentDiv.children.length;
        childDiv.id="div"+i;
        childDiv.innerHTML="<table class='tableFrame' width='100%'><tr><td>工序描述</td><td><input name='procDescribe' type='text' style='width:270px;' onblur=\"this.value=this.value.replace(/,/g,',')\"/></td>"+
                           "<td>具体明细</td><td><input name='procDetail' type='text' style='width:300px;' onblur=\"this.value=this.value.replace(/,/g,',')\"/></td>"+
                           "<td>金额</td><td><input name='procMoney' type='text' style='width:50px;' onblur=\"this.value=this.value.replace(/,/g,',')\"/></td>"+
                           "<td><input id='btnDel' type='button' value='删除' onclick='DeleteDiv("+i+")' /></td></tr></table>";
        parentDiv.appendChild(childDiv);
    }
    //删除div
    function DeleteDiv(str)
    {
        var parentDiv=document.getElementById('parentDiv');
        var temp=parentDiv.children[str];
        temp.removeNode(true);  
        for(var i = 0;i < parentDiv.children.length;i++)
        {
            parentDiv.childNodes[i].value = i;
            parentDiv.childNodes[i].childNodes[1].outerHTML="<input id='btnDel' type='button' value='删除' onclick='DeleteDiv("+i+")' />";
        }
    }
    </script>
    -------
    C# Code
    string strProcDescribe = Request.Form["procDescribe"];//工序描述集合
            string strProceDetail = Request.Form["procDetail"];//工序具体明细集合
            string strProcMoney = Request.Form["procMoney"];//工序金额集合
            string[] strDescribe = strProcDescribe.Split(',');//拆分工序描述
            string[] strDetail = strProceDetail.Split(',');//拆分具体明细
            string[] strMoney = strProcMoney.Split(',');//拆分金额
      

  6.   

    function check()
    {
    document.all.DropDownList1.selectedIndex==0
    {alert('OK?');return false;}}
      

  7.   


    我用CUSTOMVALIDATOR写的,但没实现
    谁会的写段代码上来
      

  8.   


    第一个问题 同4楼一致
    第二个问题
    想创建一个ListItem  对象
    在把  0  项添加进去
    然后其他的从数据库里面查出来 在循环添上去
    不能用绑定的  ListItem lst = new ListItem("--请选择--", "0");
      _DropDownList1.Items.Add(lst);
          foreach (DataRow dr in dt.Rows)
           {
               ListItem list = new ListItem(dr[1].ToString(), dr[0].ToString());
                _DropDownList1.Items.Add(list);
           }
      

  9.   


    说明一下,如果不加上最后的这一项  也就是 "--请选择--"
    直接绑定,然后取出SELECTEDVALUE并写入数据库是没有问题的,我试过但是this.ddlDent.Items.Insert(0, new ListItem("--请选择--", "0"));这一句加上后
    就有问题了,就有错误产生
    我现在是想实现的是,不选择就提示用户选择下拉项,谢谢,其余的办法我会
      

  10.   

    第一个,你在论坛里搜索一下,会有很多这方面的实例代码,LS也有人贴了,我也贴过一些,所以不回答了
    第二个,你在取值的时候判断一下ddlDent.SelectedIndex != 0(你插入的位置就是0)不就行了?