我有一段代码如下:
var dg = document.getElementById("DataGrid1");
var th = dg.rows[0];
th.cells[4].value =newValue;
我想把页面中DataGrid1的某行某列的单元格赋值,可是如上所写代码 好像不行 单元格的值不变的 请高人指点

解决方案 »

  1.   

    var dg = document.getElementById("DataGrid1");
    var th = dg.getElementsByTagId("tr")[0];
    th.childNodes[4].innerText = newValue;
      

  2.   

    <html>
    <head>
    <title>test</title>
    <script language="javascript">
    function test()
    {
    document.all("mytable").rows[1].cells[1].innerText = "hello";
    }
    </script>
    </head>
    <body>
    <table id="mytable" width="200" border="1">
    <tr>
    <td>00</td>
    <td>01</td>
    <td>02</td>
    </tr>
    <tr>
    <td>10</td>
    <td>11</td>
    <td>12</td>
    </tr>
    </table>
    <input type="button" onclick="test()" value="赋值">
    </body>
    </html>
      

  3.   

    谢谢楼上几位 不过用innerText赋值表面上好像值被更新可是我页面提交服务器后单元格内容抓到的还是原来的值,这是怎么回事呢?谢谢谢谢
      

  4.   

    而且我在这个Cell里试着放个Label,Label的ID为lblPLIFZ也不行啊var dg = document.getElementById("DataGrid1");
    var th = dg.rows[0];
    th.cells[4].children[0].innerText =newValue;每次提交服务器端后
    用((Label) DataGrid1.Items[0].FindControl("lblPLIFZ")).Text.Trim()得到的还是原来的值,并非newValue,这是怎么回事呢?望达人指教,小弟在线急等,跪谢
      

  5.   

    看来楼主对服务端和客户端的概念不太清楚。
    你在客户端用javascript改变的是td中间的类容,提交到服务器没有任何变化的!除非你把datagrid变成编辑状态,用文本框提交的内容服务器才能接收到
      

  6.   

    多谢楼上指点迷津 那我是不是在datagrid的TemplateColumn里放个TextBox就可以了呢?
    可是在这里我又遇到了一点小麻烦,望楼上再不吝赐教 小弟拜谢
    我的Datagrid里的TemplateColumn是这样子的:<asp:TemplateColumn HeaderText="Days">
    <ItemTemplate>
    <asp:Label id=lblPLIFZ runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.PLIFZ") %>'></asp:Label>
    <asp:TextBox id="txtPLIFZ" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.PLIFZ") %>' Visible=false>
    </asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>也就是我在ItemTemplate里面放了两个控件,可是我用先前的js去抓第二个控件时却抓不到
    var dg = document.getElementById("DataGrid1");
    var th = dg.rows[0];
    th.cells[4].children[0].innerText =newValue;
    th.cells[4].children[1].value = newValue //这行不是应该要抓到TextBox吗? 可是为什么不行呢? 我应该怎样去得到这个TextBox?
      

  7.   

    要是就一行,直接document.all("txtPLIFZ").value = newValue 应该就可以了吧。
    多行的话先这样写
    <asp:TextBox id="txtPLIFZ_<%# Container.ItemIndex+1%>" runat="server"...
    取的时候用 document.all("txtPLIFZ_"+i).value = newValue
    第几条记录,i就写几呗。
    试试~~ 
      

  8.   

    楼上谢谢你的建议 我试了不行 在页里里面你动态绑定ID好像不行
    得到错误信息: 
    分析器错误信息: “<%# Container.ItemIndex+1%>”不是有效标识符。我曾试着在DataGrid的ItemDataBound方法里设置控件的ID,代码如下:if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
    e.Item.Cells[3].Controls[1].ID = e.Item.Cells[1].Text.Trim()+e.Item.Cells[2].Text.Trim();
    Label lbltest = (Label)e.Item.Cells[3].Controls[1];
    e.Item.Cells[3].Style.Add("CURSOR","hand");
    e.Item.Cells[3].Attributes["ondblclick"] = "javascript:showVendor('"+e.Item.Cells[1].Text.Trim()+"','"+e.Item.Cells[2].Text.Trim()+"','"+lbltest.Text.Trim()+"','"+e.Item.Cells[4].Text.Trim()+"','"+e.Item.Cells[5].Text.Trim()+"','"+e.Item.ItemIndex+"')";
    }这样子在Datagrid单元格里每个动态绑定的Label都有了一个唯一的ID,(我这里cell1和cell2的值加起来就是主键)可是这样子在js里面用document.all(e.Item.Cells[1].Text.Trim()+e.Item.Cells[2].Text.Trim())方法琮是得不到其中的Label控件
    望达人指点