注册 登录
编程论坛 ASP.NET技术论坛

一个gridview的DropDownList绑定问题!!!

fsx 发布于 2008-01-08 22:06, 7900 次点击
我在gridview的编辑模板中放了一个DropDownList控件,控件是绑定数据库中的数据,当点击编辑铵钮时显示dropdownlist。数据绑定是实现了,可是在点击gridview中编辑按钮时dropdownlist中默认选中的不是该列的值。在更新时也得不到dropdownlist的selectedvalue值。不知为何,请各位帮看看,谢谢了~
代码如下:
<asp:GridView ID="gridMember" runat="server" AllowSorting="True" AutoGenerateColumns="False" Width="75%" DataKeyNames="proID" AllowPaging="True" OnPageIndexChanging="gridMember_PageIndexChanging" OnRowDataBound="gridMember_RowDataBound" OnRowEditing="gridMember_RowEditing" OnRowUpdating="gridMember_RowUpdating" OnRowCancelingEdit="gridMember_RowCancelingEdit">
                    <Columns>
                     <asp:TemplateField HeaderText="产品品牌">
                     <ItemTemplate><%#Eval("brandN")%></ItemTemplate>
                     <EditItemTemplate>
                     <asp:HiddenField runat="server" ID="hidtxt" Value='<%#Eval("brandN")%>' />
                   <asp:DropDownList runat="server" id="drop"></asp:DropDownList>
                     </EditItemTemplate>
                     </asp:TemplateField>
</Columns></asp:GridView>

后台代码:
protected void gridMember_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        string str = "select * from brands";
        DataSet dss = new DataSet();
        dss = dataFactory.ds(str, dss, "tb");
        if (((DropDownList)e.Row.FindControl("drop")) != null)
        {
            DropDownList drp = (DropDownList)e.Row.FindControl("drop");

            //  生成 DropDownList 的值,也可以取得数据库中的数据绑定
            drp.DataSource = dss.Tables["tb"];
            drp.DataTextField = "brand";
            drp.DataValueField = "brandID";
            drp.DataBind();
            //  选中 DropDownList
            drp.SelectedValue = ((HiddenField)e.Row.FindControl("hidtxt")).Value.ToString();
            //
        }
    }
更新代码:
protected void gridMember_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        string drp = ((DropDownList)gridMember.Rows[e.RowIndex].FindControl("drop")).SelectedValue;
        string str = "update proType set brand=@a1 where proID="+gridMember.DataKeys[e.RowIndex].Value+"";
        OleDbCommand cmd = new OleDbCommand(str,conn.connData());
        cmd.Parameters.Add("a1", OleDbType.Integer).Value = drp;
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();
        gridMember.EditIndex = -1;
        Init();
    }
6 回复
#2
c_henry2008-01-08 22:40
如果实在得不到值的话尝试使用javascript将select的值绑定到一个服务器端控件上,
给dropdownlist加onchange,比如每次改变将值存到一个textbox中,你在后台不去读select,而去读textbox
#3
guming2008-01-09 16:15
“可是在点击gridview中编辑按钮时dropdownlist中默认选中的不是该列的值”??那它绑定到的值是什么呢,还是说下拉表为空?
#4
fsx2008-01-10 01:11
下拉列表有值,绑定的是数据库中的值,也就是gridview该列的值。下拉列表是放在编辑模板中的,当点击编辑时显示下拉列表。可是显示时默认不能选中值,而是选中第一项,更新时也获取不了下拉列表的值。这是怎么回事呢~!
#5
zsf20062008-01-11 17:23
//  选中 DropDownList
    drp.SelectedValue = ((HiddenField)e.Row.FindControl("hidtxt")).Value.ToString();
 //
改为:

 //  选中 DropDownList
for(i=0;i<drop.Items.Count;i++)
{
    if(drop.Items[i].Value==((HiddenField)e.Row.FindControl("hidtxt")).Value.ToString())
    drop.SelectedIndex=i;
}
 //

以上只供参考

[[italic] 本帖最后由 zsf2006 于 2008-1-11 17:25 编辑 [/italic]]
#6
1916381412008-01-12 20:50
绑定到Dropdown上应该用视图模式
drp.DataSource = dss.Tables["tb"].DefaultView;
#7
fsx2008-02-02 11:46
非常感谢各位的解答,问题已基本得以解决~
1