1、我现在有一个datagrid控件,里面有一列模版列,里面是一个dropdownlist控件,我想在选择dropdownlist控件的时候生成事件,因为dropdownlsit控件没有commandname属性,所以我使用了onselectedindexchanged事件,但是这样的结果是我选择某一行的dropdownlsit控件,整个页面都要刷新了,这样感觉太不友好了,有没有什么其他的办法?
2、我在datagrid控件里面还有另外的三个模版列,里面分别是一个textbox控件,textbox1,textbox2,textbox3,我想在textbox1或者textbox2里面输入值后在textbox3里面自动显示textbox1和textbox2的和,我同样也是用的服务器端的事件,能够实现,但是界面太不友好了,麻烦问一下有没有更好的办法,谢谢了!!!

解决方案 »

  1.   

    建議你用javascript. 因為用.net 通常要經過serverside 才能工作.
    你要友好一點又要做到即時動作,javascript吧 hahha 
      

  2.   

    用javascirpt怎么实现啊,能不能说的清楚一点啊,我用javascript试过了,但是没搞对
      

  3.   

    呵呵  可以用Ajax的UpdatePanel控件   防止刷新的!
      

  4.   

    only_forever的方法我试过了,对于第二个问题,我是通过textbox控件的OnTextChanged=“javascript方法”的方式弄的,但是报错了,说不存在改事件。
      

  5.   

    建议你去看一看jquery这是一个很不错的脚本库,比javascript方便多了,而且学起来很快。
    1.你可以这个在那个dropdownlist控件的标签里面加一个事件onchange="javascript:return SetChange(this);"在脚本里面写一个方法,同时导一个jquery.js的脚本库这样就可以了
    function SetChange(obj)
    {
       $(obj).children().each(function()
       {
          if($(this).attr("selected")=="selected")
          {
             $(this).val()//获取选中项的文本值
          }
       })
    }
    多看看jquery,这个东西很不错的
      

  6.   

    对了,在那个function SetChange(obj) 方法最后再写一行代码return false;
    这样就不会刷新了
      

  7.   

    第一个问题,如果用服务器控件就用UpdatePanel,最好用js来实现,如果你的js掌握的可以的,这个应该不难。第二个问题,用js实现很方便。因为有Gridview所以我不用datagrid,我就下在Gridview下怎么实现吧。
    在Gridview的RowCreated事件中给textbox1和textbox2加上onchange事件setSum(this),前台页面定义
    function setSum(o){var tr=o.parentElement.parentElement;} tr就是gridview转变table所在行,把它们的和赋给textbox3就OK了!
      

  8.   

    jquery不一样是js,搞清楚再说。只不过它是别人写好的js库而已!
      

  9.   

    简单点可以用AJAX控件中的UPDATAPANE包起来
    也可以用javascript在前端写
    在前端抓取控件,然后赋值
    今天不好给你写代码了,机子上没有安装VS2005 
    自己试试
      

  10.   

    @dajun17
    你好,能不能麻烦你说的更清楚一点。我对javascript不是很熟悉。
      

  11.   

    @daijun17
    大哥,有没有用过jquery呀,不知道就不要乱说,
    它是把javascript里面对标签节点复杂的操作方法,进行简单化了
      

  12.   

    2、我在datagrid控件里面还有另外的三个模版列,里面分别是一个textbox控件,textbox1,textbox2,textbox3,我想在textbox1或者textbox2里面输入值后在textbox3里面自动显示textbox1和textbox2的和,我同样也是用的服务器端的事件,能够实现,但是界面太不友好了,麻烦问一下有没有更好的办法,谢谢了!!!
    ------------------------------
    如果 textbox控件的ID是有序的如textbox1,textbox2,textbox3,可以这么处理: <script type="text/javascript">
        function ChangeValue( oTxt,id)
        {
        var oTxt1 = oTxt.id;
        var oTxt2 = oTxt1.substring(0,oTxt1.length-1) + "2";
        if(id == '2')
         oTxt2 = oTxt1.substring(0,oTxt1.length-1) + "1";
         
         var oTxt3 = oTxt1.substring(0,oTxt1.length-1) + "3";
       // alert( parseFloat( oTxt.value) + parseFloat(document.getElementById(oTxt2).value) );
        document.getElementById(oTxt3).value =parseFloat( oTxt.value) + parseFloat(document.getElementById(oTxt2).value);
        }
        </script>--------------------------------
    <ItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" onChange="ChangeValue(this,'1')"></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox2" runat="server" onChange="ChangeValue(this,'2')"></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                        </ItemTemplate>
      

  13.   

    document.getElementById(TextBox3).value 在javascript里面这样找datagrid里面某一模版列的方式好像不对,这样找不到那个控件。
      

  14.   

    javascript 不要用.NET了,它就是这样的
    ----------------------------------------------------------------------------------------
    欢迎访问我的新站:http://www.FavNet.cn —— 专勤致精 想您所思 专业IT技术服务
    展示技术实力,寻求合作伙伴、合作项目中……
      

  15.   

    function setSum(o){var tr=o.parentElement.parentElement;}
    这个怎么用的啊,我不是太懂。
      

  16.   

    o---textbox
    o.parentElement----o所在td
    o.parentElement.parentElement------o所在td所在的行
      

  17.   

    问题终于解决了,在这里非常感觉 qfgyd2004 的在线帮助。
    我这里把解决的代码贴出来,希望大家指点。javascript 代码
    <script language="javascript">

    function setSum(o)
    {
    var name=o.name;
    //alert(name);
    var index=name.substring(name.indexOf('l')+1,name.lastIndexOf(':'));
    //alert(index);
    var tb1=document.getElementById("DataGrid1__ctl"+index+"_aa");
    //alert(tb1.value);
    var tb2=document.getElementById("DataGrid1__ctl"+index+"_bb");
    var tb3=document.getElementById("DataGrid1__ctl"+index+"_cc");
    tb3.value=parseInt(tb1.value)+parseInt(tb2.value); }
    </script>
    设计标签
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 80px; POSITION: absolute; TOP: 64px" runat="server"
    AutoGenerateColumns="False">
    <Columns>
    <asp:BoundColumn DataField="col1" HeaderText="col1"></asp:BoundColumn>
    <asp:BoundColumn DataField="col2" HeaderText="col2"></asp:BoundColumn>
    <asp:BoundColumn DataField="col3" HeaderText="col3"></asp:BoundColumn>
    <asp:TemplateColumn HeaderText="加数一">
    <ItemTemplate>
    <asp:TextBox id="aa" onchange="setSum(this)" runat="server"></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="加数二">
    <ItemTemplate>
    <asp:TextBox id="bb" onchange="setSum(this)" runat="server"></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="和">
    <ItemTemplate>
    <asp:TextBox id="cc" name="TextBox3" runat="server"></asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="计算">
    <ItemTemplate>
    <asp:Button id="Button" Text="计算" runat="server"></asp:Button>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    </form>
    </body>