如何获取网格视图中下拉列表的选定值

本文关键字:下拉列表 视图 网格 何获取 获取 | 更新日期: 2023-09-27 18:00:38

场景

我正在将DataGrid与包含DropDownList的列一起使用。当我更新这些值时,DropDownList值不会得到更新。

我迄今为止的研究

我相信它需要一些C#代码来使DropDownList可编辑。我不知道把代码放在哪里,怎么放?有比C#代码更短的方法吗?

非常感谢

编辑:提供的代码

student_table:id,姓名,专业,收藏夹_教师

teacher_table:id,名称

网格视图有学生的数据源。DropDownList具有教师数据源。

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

如何获取网格视图中下拉列表的选定值

请尝试以下代码,并让我知道它是否已修复:

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

您可以尝试以下代码

DataSourceID="sds_teacher_table"指的是teacheer_table。网格视图将引用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;
    }

我在这里的教程中实现了这一点,而没有编写任何C#代码。

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

你必须实施一个技巧。您需要将gridview的值绑定到要从中获取数据的另一个表的数据源。但根据设计,由于下拉列表包含在GridView中,所以它只能绑定到GridView字段。这是主要的并发症。

要克服这一点,请在网格视图中包含这些附加字段。您可能需要使用join语句,以便在gridview中包含所需的所有字段。现在,您可以轻松地将这些字段绑定到DropDownlist。当然,您不需要在GridView中显示这些额外的值,它们只用于DropDownList。这将解决您的问题,而无需编写一行代码。