编辑GridView时显示下拉列表

时间:2011-05-19 14:31:14

标签: c# asp.net sql gridview drop-down-menu

当用户编辑行时,我想在GridView中显示一个字段作为DropDownList。 DropDownList将预先填充两个值,“是”和“否”,并且取决于用户选择的值,我想设置变量。

示例:

我有一个名为active的字段。 1 =有效,0 =无效。虽然对于用户我希望他们将Active设置为“Yes”(1)或“No”(0)。当编辑行时,他们可以从下拉列表中选择“是”或“否”,它会将变量设置为1或0,因此我可以在SQL更新中将其发回。

我发现了MSDN article

但它只告诉我如何从DataSource填充DropDownList,这对我来说不起作用,因为每个字段都有一个yes或no for active。即使只是在查看GridView时,它也会显示下拉列表,而不仅仅是在编辑时。

我希望这是有道理的,谢谢你的帮助。

修改

这是我现在的代码,它几乎像我喜欢的那样。如果Active的值为“True”,我现在需要做的就是将标签文本更改为“Yes”,如果Active的值为“False”,则将文本更改为“No”。

<asp:TemplateField HeaderText="Active" SortExpression="Active" >
                        <ItemTemplate>
                             <asp:Label ID="lblActive" runat="server" text='<%# Eval("Active") %>'/>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Bind("Active")  %>'>
                                <asp:ListItem Text="Yes" Value="True"></asp:ListItem>
                                <asp:ListItem Text="No" Value="False"></asp:ListItem>
                            </asp:DropDownList>
                        </EditItemTemplate>
                    </asp:TemplateField>

5 个答案:

答案 0 :(得分:1)

您可以添加类似...

的列表项
<asp:DropDownList ID="DropDownList1" runat="server">
        <asp:ListItem Text="Yes" Value="1"></asp:ListItem>
        <asp:ListItem Text="No" Value="0"></asp:ListItem>
    </asp:DropDownList>

您可以绑定SelectedValue,它会自动将数据库传递给1 or o

答案 1 :(得分:0)

使用EditTemplate中的下拉列表并使用标签在ItemTemplate中显示选择内容 请参阅msdn post中的此示例(一直滚动到下拉列表方案的末尾)。

答案 2 :(得分:0)

  1. 在edititem模板中放置一个标签控件(显示数据库中的当前值)和下拉列表

    <asp:Label ID="lbl" runat="server" Text='<%#Eval("authostatus") %>' Visible="false"></asp:Label>
    <asp:DropDownList ID="Autharisationddl" runat="server">
      <asp:ListItem Text="Yes" Value="1"></asp:ListItem>
      <asp:ListItem Text="No" Value="0"></asp:ListItem>
    </asp:DropDownList>
    
  2. 在gridview rowdatabound事件中,根据标签控制值设置下拉值。

    if ((e.Row.RowState & DataControlRowState.Edit) > 0)
    {
      Label lbl= (Label)e.Row.FindControl("lbl");
      DropDownList ddl= (DropDownList)e.Row.FindControl("ddl");
    
      if (lbl!= null)
      {
        if (lbl.Text == "1")
          ddl.SelectedValue = "1";
        else if (lbl.Text == "0")
          ddl.SelectedValue = "0";
      }
    }
    
  3. 感谢

答案 3 :(得分:0)

您不需要rowdatabound,只需将列转换为模板字段。

答案 4 :(得分:0)

这是迟到的回复,但它会帮助遇到相同情况的其他人。

codezone4 tutorial