2011-06-29 73 views
1

方案如何获取GridView中下拉列表的选定值?

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

我的研究,到目前为止

我相信它需要一些C#代码所做的DropDownList编辑。我不知道在哪里放置代码以及如何?有没有比C#代码更短的方式?

非常感谢您

编辑:提供的代码

student_table:ID,姓名,专业,favorite_teacher

teacher_table:ID,名称

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

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

回答

0

我实现了这个从教程here无需编写任何C#代码。

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

有一个你必须实现的技巧。您需要将gridview的值绑定到要从中提取数据的另一个表的数据源。但通过设计,由于下拉列表包含在GridView中,因此只能绑定到gridview字段。这是主要的并发症。

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

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

我做了一些研究,因为当时和现在我发现了什么是我需要的下拉列表绑定到下拉数据源,rathan比gridview数据源。默认情况下,它给了我gridview的参数。我的下拉列表位于gridview内部。请评论,如果你有答案。 –

+0

即使下拉列表位于gridview内部,您可以提及不同的数据源并绑定数据,但您必须提及DataSourceID =“sqlDS_name”字段中的数据源名称。 如果你找不到答案,请用一些价值或示例来阐述你的问题。 – Saanch

+0

我附上了一个示例代码并对其进行了更多解释。如果你有问题,请在这里发布。谢谢 –

1

请尝试下面的代码,让我知道,如果它的固定:

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