none
关于DropDownList的事件? RRS feed

  • 问题

  • 问题是这样的:
      当我改变某个DropDownList的选项后,让label显示3个DropDownList的所显示值的和。逐一试用DropDownList的事情后,发现都不能达到这一目的,lable显示的总是改变前的值,甚至同时用两个事件都不能达到这一目的。
      各位大侠,请指点!!
    youl
    • 已移动 孟宪会Moderator 2009年8月28日 3:02 (发件人:.NET Framework 一般性问题讨论区)
    2009年8月27日 10:37

答案

  • <%@ Page Language="C#" AutoEventWireup="true"%>
    <!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>
        <script type="text/javascript">
            function ShowTotal()
            {
                var total = (document.all('DropDownList1').selectedIndex == -1 ? 0 : document.getElementById('DropDownList1').options[document.all('DropDownList1').selectedIndex].text * 1)
                          + (document.all('DropDownList2').selectedIndex == -1 ? 0 : document.getElementById('DropDownList2').options[document.all('DropDownList2').selectedIndex].text * 1)
                          + (document.all('DropDownList3').selectedIndex == -1 ? 0 : document.getElementById('DropDownList3').options[document.all('DropDownList3').selectedIndex].text * 1);
                          
                document.getElementById('Label1').innerText = "合计:" + total;
            }
            
        </script>
        <script runat="server">
    
            protected void Page_Load(object sender, EventArgs e)
            {
                // 延时是因为回发的原因, 使用 Javascript 就没有问题了
                this.DropDownList1.Attributes["onchange"] = "ShowTotal();";
                this.DropDownList2.Attributes["onchange"] = "ShowTotal();";
                this.DropDownList3.Attributes["onchange"] = "ShowTotal();";
    
                this.DropDownList1.SelectedIndex = -1;
                this.DropDownList2.SelectedIndex = -1;
                this.DropDownList3.SelectedIndex = -1;
    
                this.Label1.Text = string.Format("合计:{0}",
                      (this.DropDownList1.SelectedItem == null ? 0 : Convert.ToInt32(this.DropDownList1.SelectedItem.Text))
                    + (this.DropDownList2.SelectedItem == null ? 0 : Convert.ToInt32(this.DropDownList2.SelectedItem.Text))
                    + (this.DropDownList3.SelectedItem == null ? 0 : Convert.ToInt32(this.DropDownList3.SelectedItem.Text)));
            }
    
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        
        <asp:Label ID="Label1" runat="server" Text="合计:{0}"></asp:Label>
        <asp:DropDownList ID="DropDownList1" runat="server">
            <asp:ListItem>1</asp:ListItem>
            <asp:ListItem>2</asp:ListItem>
            <asp:ListItem>3</asp:ListItem>
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList2" runat="server">
            <asp:ListItem>1</asp:ListItem>
            <asp:ListItem>2</asp:ListItem>
            <asp:ListItem>3</asp:ListItem>
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList3" runat="server">
            <asp:ListItem>1</asp:ListItem>
            <asp:ListItem>2</asp:ListItem>
            <asp:ListItem>3</asp:ListItem>
        </asp:DropDownList>
        
        </form>
    </body>
    </html>
    
    

    知识改变命运,奋斗成就人生!
    2009年8月27日 11:48
    版主

全部回复

  • 使用 SelectedIndexChanged 事件, AutoPostBack 需要设置为 True
    知识改变命运,奋斗成就人生!
    2009年8月27日 11:04
    版主
  • 版主,已经试过了,不行。总是滞后。还有别的办法吗?
    youl
    2009年8月27日 11:16
  • <%@ Page Language="C#" AutoEventWireup="true"%>
    <!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>
        <script type="text/javascript">
            function ShowTotal()
            {
                var total = (document.all('DropDownList1').selectedIndex == -1 ? 0 : document.getElementById('DropDownList1').options[document.all('DropDownList1').selectedIndex].text * 1)
                          + (document.all('DropDownList2').selectedIndex == -1 ? 0 : document.getElementById('DropDownList2').options[document.all('DropDownList2').selectedIndex].text * 1)
                          + (document.all('DropDownList3').selectedIndex == -1 ? 0 : document.getElementById('DropDownList3').options[document.all('DropDownList3').selectedIndex].text * 1);
                          
                document.getElementById('Label1').innerText = "合计:" + total;
            }
            
        </script>
        <script runat="server">
    
            protected void Page_Load(object sender, EventArgs e)
            {
                // 延时是因为回发的原因, 使用 Javascript 就没有问题了
                this.DropDownList1.Attributes["onchange"] = "ShowTotal();";
                this.DropDownList2.Attributes["onchange"] = "ShowTotal();";
                this.DropDownList3.Attributes["onchange"] = "ShowTotal();";
    
                this.DropDownList1.SelectedIndex = -1;
                this.DropDownList2.SelectedIndex = -1;
                this.DropDownList3.SelectedIndex = -1;
    
                this.Label1.Text = string.Format("合计:{0}",
                      (this.DropDownList1.SelectedItem == null ? 0 : Convert.ToInt32(this.DropDownList1.SelectedItem.Text))
                    + (this.DropDownList2.SelectedItem == null ? 0 : Convert.ToInt32(this.DropDownList2.SelectedItem.Text))
                    + (this.DropDownList3.SelectedItem == null ? 0 : Convert.ToInt32(this.DropDownList3.SelectedItem.Text)));
            }
    
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        
        <asp:Label ID="Label1" runat="server" Text="合计:{0}"></asp:Label>
        <asp:DropDownList ID="DropDownList1" runat="server">
            <asp:ListItem>1</asp:ListItem>
            <asp:ListItem>2</asp:ListItem>
            <asp:ListItem>3</asp:ListItem>
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList2" runat="server">
            <asp:ListItem>1</asp:ListItem>
            <asp:ListItem>2</asp:ListItem>
            <asp:ListItem>3</asp:ListItem>
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList3" runat="server">
            <asp:ListItem>1</asp:ListItem>
            <asp:ListItem>2</asp:ListItem>
            <asp:ListItem>3</asp:ListItem>
        </asp:DropDownList>
        
        </form>
    </body>
    </html>
    
    

    知识改变命运,奋斗成就人生!
    2009年8月27日 11:48
    版主
  • 我的DropDownList的选项来源于数据库(默认值为0),而不是ListItem,于是我得到以下提示。
    未将对象引用设置到对象的实例。
    请您给我举一个用数据库作为选项的例子吧。


    youl
    2009年8月27日 12:31
  • 这个错误是因为你没有选中项,所以 SelectedItem 为 Null ,你在计算时做个判断就行了。不管你的数据来源是什么 DropDownList 中的项都是 ListItem
    知识改变命运,奋斗成就人生!
    2009年8月27日 12:40
    版主
  • 和使用母版有关系吗?
    youl
    2009年8月27日 13:13
  • 使用数据库作选项,下列语句有提示.
    this.Label1.Text = string.Format("合计:{0}",
                    Convert.ToInt32(this.DropDownList1.SelectedItem.Text)
                    + Convert.ToInt32(this.DropDownList2.SelectedItem.Text)
                    + Convert.ToInt32(this.DropDownList3.SelectedItem.Text));
     提示信息为:未将对象引用设置到对象的实例。


    youl
    2009年8月27日 13:24
  • 使用数据库作选项,下列语句有提示.
    this.Label1.Text = string.Format("合计:{0}",
                    Convert.ToInt32(this.DropDownList1.SelectedItem.Text)
                    + Convert.ToInt32(this.DropDownList2.SelectedItem.Text)
                    + Convert.ToInt32(this.DropDownList3.SelectedItem.Text));
     提示信息为:未将对象引用设置到对象的实例。


    youl

    在这句上设个断点,看看哪个对象为null,有可能是某个SelectedItem为null,把鼠标移上去看看
    2009年8月27日 13:47
    版主
  • 已更正~
    知识改变命运,奋斗成就人生!
    2009年8月27日 13:55
    版主