如何在gridview中获取下拉列表的选定值?

时间:2011-06-29 20:57:05

标签: c# gridview drop-down-menu

方案

我正在使用包含DataGrid的列的DropDownList。当我更新值时,DropDownList值不会更新。

到目前为止

我的研究

我认为需要一些C#代码才能使DropDownList可编辑。我不知道在哪里放代码以及如何?有没有比C#代码短的方法?

非常感谢

编辑:提供的代码

student_table:id,name,major,favorite_teacher

teacher_table:id,name

gridview有学生的数据源。 DropDownList有教师的数据源。

在gridview中,我将favorite_teacher设为模板字段(DropDownList),并将teacher_table作为数据源。在编辑模式下,DropDownList显示正确并填充教师表中的教师。当我为任何学生选择最喜欢的老师并点击提交时,提交不会通过。我可能需要一些C#代码或其他。不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

请尝试下面的代码并告诉我它是否已修复:

protected void btnClick_Click(object sender, EventArgs e)
{
    var tmpValue = ((DropDownList)gvRowItem.Cells[/*cellId*/].FindControl("/*dropDownListId*/")).SelectedValue;
}

答案 1 :(得分:0)

您可以尝试以下代码

DataSourceID =“sds_teacher_table”指的是teacher_table。 gridview将引用student_table

            <asp:TemplateField HeaderText="Favourite Teacher" >
                <ItemTemplate>
                    <asp:Label ID="lblfavorite_teacher" runat="server" Text='<%# LookupTeacherName(DataBinder.Eval(Container.DataItem, "id")) %>'></asp:Label> 
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:DropDownList ID="ddlfavorite_teacher" runat="server" DataSourceID="sds_teacher_table" DataTextField="name" DataValueField="id" SelectedValue='<%#Bind("id")%>' Width="98%">
                    </asp:DropDownList> 
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:DropDownList ID="ddlNewfavorite_teacher" runat="server" DataSourceID="sds_teacher_table" DataTextField="name" DataValueField="id" SelectedValue='<%#Bind("id")%>' Width="95%">
                    </asp:DropDownList> 
                </FooterTemplate>
               <ItemStyle Width="25%" /> 
           </asp:TemplateField>


    protected string LookupTeacherName(object idObj)
    {
        if (string.IsNullOrEmpty(idObj.ToString()))
            return null;

        string TeacherId = idObj.ToString();

        // find the corresponding name
        IEnumerator enumos = sds_teacher_table.Select(new DataSourceSelectArguments()).GetEnumerator();
        while (enumos.MoveNext())
        {
            DataRowView row = enumos.Current as DataRowView;

            if ((string)row["id"].ToString() == TeacherId)
                return string.Concat(row["name"].ToString());
        }

        return TeacherId;
    }

答案 2 :(得分:0)

我是从教程here实现的,没有编写任何C#代码。

您不需要C#代码,但您也可以使用C#代码实现它。

您必须实施一项技巧。您需要将gridview的值绑定到要从中获取数据的另一个表的数据源。但是按照设计,由于下拉列表包含在GridView中,因此它只能绑定到gridview字段。这是主要的复杂因素。

要解决此问题,请在gridview中包含这些其他字段。您可能需要使用join语句,以便可以在gridview中包含所需的所有字段。现在,您可以轻松地将这些字段绑定到DropDownlist。当然,您不需要在GridView中显示这些额外的值,它们只适用于DropDownList。这将解决您的问题,而无需编写任何代码。