【问题标题】:How to get selected value for dropdown list inside gridview?如何在gridview中获取下拉列表的选定值?
【发布时间】:2011-06-29 20:57:05
【问题描述】:

场景

我将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# 代码或其他。不知道如何解决这个问题。

【问题讨论】:

    标签: c# gridview drop-down-menu


    【解决方案1】:

    请尝试以下代码,如果它已修复,请告诉我:

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

    【讨论】:

      【解决方案2】:

      你可以试试下面的代码

      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;
          }
      

      【讨论】:

      • 从那时起我做了一些研究,现在我发现我需要将下拉列表绑定到下拉数据源,而不是 gridview 数据源。默认情况下,它给了我gridview的参数。我的下拉列表位于 gridview 内。如果您有答案,请发表评论。
      • 即使下拉列表位于 gridview 中,您也可以提及不同的数据源并绑定数据,您必须在 DataSourceID="sqlDS_name" 字段中提及数据源名称。如果您找不到答案,请用一些价值或示例详细说明您的问题。
      • 我附上了一个示例代码并对其进行了更多解释。如果您有任何疑问,请在此处发布。谢谢
      • @Dave : 我已经更新了代码,请尝试使用上面的代码,如果它有效,请告诉我们。
      • 有点复杂。我无法实现整个事情,因为您的某些变量名称与我的不同。但你得到了整个想法。现在,当我查看您的方法时,它不会更新数据库,是吗?在我的 GridView1 中,我之前使用过更新查询。现在我已将其更改为 storedProcedure 以使其变得简单。我实际上希望在数据库表中更新提交的值,并从那里获取它以显示。将向您发送新代码,请稍候。
      【解决方案3】:

      我通过教程 here 实现了这一点,没有编写任何 C# 代码。

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

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

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

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-06
        相关资源
        最近更新 更多