我要用datagird进行编辑,datagrid中有DropDownList。选取DropDownList中的其他项。相应的cell中的值进行更新。不是所有的cell都更新。其中的一个或者两个。

解决方案 »

  1.   

    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:DropDownList id="DropDownList1" runat="server">
    <asp:ListItem Value="AAA">AAA</asp:ListItem>
    <asp:ListItem Value="BBB">BBB</asp:ListItem>
    <asp:ListItem Value="CCC">CCC</asp:ListItem>
    </asp:DropDownList>
    </ItemTemplate>
    </asp:TemplateColumn>
    ********************************
    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemIndex>-1)//如果dropdownlist是放在<EditItemTemplate>,那么这个判断条件改为if(e.Item.ItemType == ListItemType.EditItem)
    {
    ((DropDownList)e.Item.FindControl("DropDownList1")).Attributes.Add("onchange","this.parentElement.parentElement.cells[0].innerHTML = ddlst.value;");
    }
    }
      

  2.   

    上面有小错误,修正:
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:DropDownList id="DropDownList1" runat="server">
    <asp:ListItem Value="AAA">AAA</asp:ListItem>
    <asp:ListItem Value="BBB">BBB</asp:ListItem>
    <asp:ListItem Value="CCC">CCC</asp:ListItem>
    </asp:DropDownList>
    </ItemTemplate>
    </asp:TemplateColumn>
    ********************************
    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemIndex>-1)//如果dropdownlist是放在<EditItemTemplate>,那么这个判断条件改为if(e.Item.ItemType == ListItemType.EditItem)
    {
    ((DropDownList)e.Item.FindControl("DropDownList1")).Attributes.Add("onchange","this.parentElement.parentElement.cells[0].innerHTML = this.value;");
    }
    }
      

  3.   

    谢谢Eddie005(♂) 暴赱 『零零伍』(︶︵︶) ( ) 我已经在datagrid中赋值了数据。有的能编辑有的不能。
    如下所示。我选择的劳务名称其中的一项。额定小分要进行变化
    <asp:BoundColumn DataField="zgbh" HeaderText="员工编号"></asp:BoundColumn>
    <asp:BoundColumn DataField="zgxm" HeaderText="职工姓名"></asp:BoundColumn>
    <asp:TemplateColumn HeaderText="劳务名称">
    <ItemTemplate>
    <asp:DropDownList id=DropDownList1 AutoPostBack="True" runat="server" OnSelectedIndexChanged="DropDownListChange" DataSource="<%# initdatatable() %>" DataTextField="lwmc" DataValueField="lwbh">
    </asp:DropDownList>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="额定小分">
    <ItemTemplate>
    <asp:Label id=lbledxf runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.edxf") %>'>
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox id=TextBox3 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.edxf") %>'>
    </asp:TextBox>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="调整比例">
    <ItemTemplate>
    <asp:TextBox id=txttzbl runat="server" Width="70px" Text='<%# DataBinder.Eval(Container, "DataItem.tzbl") %>'>
    </asp:TextBox>
    </ItemTemplate>
    </asp:TemplateColumn>
      

  4.   

    因为用javascript实现效果比较好,不用刷新,所以我还是主张用js实现:
    把上面的代码改一下:
    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemIndex>-1)
    {
    ((DropDownList)e.Item.FindControl("DropDownList1")).Attributes.Add("onchange","selected(this);");
    }
    }**********
    <script language="javascript">
    function selected(ddlst)
    {
    //ddlst.parentElement.parentElement.cells[0].innerHTML = ddlst.value;
    var objLabel = document.getElementById(ddlst.id.replace("DropDownList1","lbledxf"));
    var objTextBox1 = document.getElementById(ddlst.id.replace("DropDownList1","TextBox3"));
    var objTextBox2 = document.getElementById(ddlst.id.replace("DropDownList1","txttzbl"));

    if(objLabel!=null) objLabel.innerHTML = ddlst.value;
    if(objTextBox1!=null) objTextBox1.value = ddlst.value;
    if(objTextBox2!=null) objTextBox1.value = ddlst.value;
                            //作为例子,仅仅是将当前行几处的值改为选中的劳务名称,至于lz需要如何根据劳务名称调整比例你自己扩充吧
    }

    </script>