【问题标题】:Dropdownlist in gridview edit template doesnt' update value of columngridview 编辑模板中的下拉列表不会更新列的值
【发布时间】:2016-07-18 12:41:00
【问题描述】:

所以我有一个与 sql 数据源绑定的 gridview。之后,我为一列更改了编辑模板,而不是 textBox,我使用了下拉列表。在该下拉列表中,我输入了两个项目及其值。现在,当我更新安装 dropdownlist 的 gridview 列时,不会将旧值更新为新值,而是获得 NULL 值。

这是我的代码:

<asp:GridView ID="gvNeobrađene" HorizontalAlign="Center" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" DataSourceID="sdsNeobradene" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowUpdating="gvNeobrađene_RowUpdating">
          <AlternatingRowStyle BackColor="White" />
          <Columns>
              <asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" ReadOnly="True" SortExpression="Id" />
              <asp:BoundField DataField="Ime" HeaderText="Ime" SortExpression="Ime" />
              <asp:BoundField DataField="Prezime" HeaderText="Prezime" SortExpression="Prezime" />
              <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
              <asp:BoundField DataField="Telefon" HeaderText="Telefon" SortExpression="Telefon" />
              <asp:BoundField DataField="Napomena" HeaderText="Napomena" SortExpression="Napomena" />
              <asp:BoundField DataField="SeminarID" HeaderText="SeminarID" SortExpression="SeminarID" />
              <asp:BoundField DataField="TerminID" HeaderText="TerminID" SortExpression="TerminID" />
              <asp:CheckBoxField DataField="PotvrdaP" HeaderText="PotvrdaP" SortExpression="PotvrdaP" ReadOnly="false"/>
              <asp:TemplateField HeaderText="v" SortExpression="StatusP">
                  <EditItemTemplate>
                      <asp:DropDownList ID="ddlStatus" runat="server">
                          <asp:ListItem Value="Prihvaćena">Prihvaćena</asp:ListItem>
                          <asp:ListItem Value="Odbijena">Odbijena</asp:ListItem>
                      </asp:DropDownList>
                  </EditItemTemplate>
                  <ItemTemplate>
                      <asp:Label ID="Label1" runat="server" Text='<%# Bind("StatusP") %>'></asp:Label>
                  </ItemTemplate>
              </asp:TemplateField>
              <asp:CommandField ButtonType="Button" CancelText="Odustani" DeleteText="Izbriši" EditText="Uredi" InsertText="Ubaci" NewText="Novo" SelectText="Odaberi" ShowEditButton="True" ShowHeader="True" UpdateText="Spremi" ShowDeleteButton="True" />
          </Columns>
          <EditRowStyle BackColor="#2461BF" />
          <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
          <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
          <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
          <RowStyle BackColor="#EFF3FB" />
          <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
          <SortedAscendingCellStyle BackColor="#F5F7FB" />
          <SortedAscendingHeaderStyle BackColor="#6D95E1" />
          <SortedDescendingCellStyle BackColor="#E9EBEF" />
          <SortedDescendingHeaderStyle BackColor="#4870BE" />
      </asp:GridView>
      <asp:SqlDataSource ID="sdsNeobradene" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$ ConnectionStrings:SeminarBazaConnectionString %>" 
          DeleteCommand="DELETE FROM [Predbiljezba] WHERE [Id] = @original_Id AND [Ime] = @original_Ime AND [Prezime] = @original_Prezime AND [Email] = @original_Email AND [Telefon] = @original_Telefon AND (([Napomena] = @original_Napomena) OR ([Napomena] IS NULL AND @original_Napomena IS NULL)) AND [SeminarID] = @original_SeminarID AND [TerminID] = @original_TerminID AND [PotvrdaP] = @original_PotvrdaP AND (([StatusP] = @original_StatusP) OR ([StatusP] IS NULL AND @original_StatusP IS NULL))" InsertCommand="INSERT INTO [Predbiljezba] ([Ime], [Prezime], [Email], [Telefon], [Napomena], [SeminarID], [TerminID], [PotvrdaP], [StatusP]) VALUES (@Ime, @Prezime, @Email, @Telefon, @Napomena, @SeminarID, @TerminID, @PotvrdaP, @StatusP)" OldValuesParameterFormatString="original_{0}" 
          SelectCommand="SELECT * FROM [Predbiljezba] WHERE ([PotvrdaP] = @PotvrdaP)" 
          UpdateCommand="UPDATE [Predbiljezba] SET [Ime] = @Ime, [Prezime] = @Prezime, [Email] = @Email, [Telefon] = @Telefon, [Napomena] = @Napomena, [SeminarID] = @SeminarID, [TerminID] = @TerminID, [PotvrdaP] = @PotvrdaP, [StatusP] = @StatusP WHERE [Id] = @original_Id">
          <DeleteParameters>
              <asp:Parameter Name="original_Id" Type="Int32" />
              <asp:Parameter Name="original_Ime" Type="String" />
              <asp:Parameter Name="original_Prezime" Type="String" />
              <asp:Parameter Name="original_Email" Type="String" />
              <asp:Parameter Name="original_Telefon" Type="String" />
              <asp:Parameter Name="original_Napomena" Type="String" />
              <asp:Parameter Name="original_SeminarID" Type="Int32" />
              <asp:Parameter Name="original_TerminID" Type="Int32" />
              <asp:Parameter Name="original_PotvrdaP" Type="Boolean" />
              <asp:Parameter Name="original_StatusP" Type="String" />
          </DeleteParameters>
          <InsertParameters>
              <asp:Parameter Name="Ime" Type="String" />
              <asp:Parameter Name="Prezime" Type="String" />
              <asp:Parameter Name="Email" Type="String" />
              <asp:Parameter Name="Telefon" Type="String" />
              <asp:Parameter Name="Napomena" Type="String" />
              <asp:Parameter Name="SeminarID" Type="Int32" />
              <asp:Parameter Name="TerminID" Type="Int32" />
              <asp:Parameter Name="PotvrdaP" Type="Boolean" />
              <asp:Parameter Name="StatusP" Type="String" />
          </InsertParameters>
          <SelectParameters>
              <asp:Parameter DefaultValue="False" Name="PotvrdaP" Type="Boolean" />
          </SelectParameters>
          <UpdateParameters>
              <asp:Parameter Name="Ime" Type="String" />
              <asp:Parameter Name="Prezime" Type="String" />
              <asp:Parameter Name="Email" Type="String" />
              <asp:Parameter Name="Telefon" Type="String" />
              <asp:Parameter Name="Napomena" Type="String" />
              <asp:Parameter Name="SeminarID" Type="Int32" />
              <asp:Parameter Name="TerminID" Type="Int32" />
              <asp:Parameter Name="PotvrdaP" Type="Boolean" />
              <asp:Parameter Name="StatusP" Type="String" />
              <asp:Parameter Name="original_Id" Type="Int32" />
              <asp:Parameter Name="original_Ime" Type="String" />
              <asp:Parameter Name="original_Prezime" Type="String" />
              <asp:Parameter Name="original_Email" Type="String" />
              <asp:Parameter Name="original_Telefon" Type="String" />
              <asp:Parameter Name="original_Napomena" Type="String" />
              <asp:Parameter Name="original_SeminarID" Type="Int32" />
              <asp:Parameter Name="original_TerminID" Type="Int32" />
              <asp:Parameter Name="original_PotvrdaP" Type="Boolean" />
              <asp:Parameter Name="original_StatusP" Type="String" />
          </UpdateParameters>
      </asp:SqlDataSource>

还有什么我需要改变的东西才能起作用吗?

【问题讨论】:

  • 将 DDL 的 ID 改为 StatusP 并尝试 agian。
  • 这对我不起作用:(

标签: c# asp.net gridview


【解决方案1】:

您需要绑定您的DropDownList 到您的数据库字段

<asp:DropDownList ID="ddlStatus" runat="server"
    SelectedValue='<%# Bind("StatusP") %>'>
    <asp:ListItem Value="">None</asp:ListItem>
    <asp:ListItem Value="Prihvaćena">Prihvaćena</asp:ListItem>
    <asp:ListItem Value="Odbijena">Odbijena</asp:ListItem>
</asp:DropDownList>

关键部分是

SelectedValue='<%# Bind("StatusP") %>'

这将导致您选择的值传递给您的数据源。

【讨论】:

  • 您好,柯克,在我按照您的建议执行操作后,我收到此错误 - 'ddlStatus' 的 SelectedValue 无效,因为它不存在于项目列表中。我知道问题出在哪里,但我不知道如何解决它。我的数据库表中有一个默认为空的列。当我编辑时,我需要为该列赋予值,并且该值只能是“Prihvaćena”或“Odbijena”。我的 ddl 没有与任何东西绑定,但它里面有两个项目及其文本和值。当我按保存时,我没有选择发送到数据库中该列的值,它也没有出现在我的代码中:(
  • @Goran 您可以添加一个“无”列,如果您的值在开始时为空,则该列将被选中。我已经更新了答案,但如果该字段有其他要求,请告诉我。
  • 在此之后出现了错误,但现在它就像一开始一样,在我按下更新后,无论在下拉列表中选择什么,它都会发送空值。我真的不知道是什么问题。我第一次尝试这个,我只是想从文本框更改为下拉列表,以限制用户输入两个可能的字符串之一......也许我这样做是错误的,真的不知道:(
  • 我用你的例子中的这三个值制作了一个 sql 表,并像你一样绑定,现在一切正常:) 非常感谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
  • 2011-05-10
  • 2017-11-26
相关资源
最近更新 更多