DropDownList   zodpovězená otázka

ASP.NET WebForms

Dobrý den,

načítám do DropDownListu data z jedné realce, které pak ukládám do druhé relace. Data se do DropDownListu úspěšně načtou, ale když pak ve vkládacím formuláři vyberu hodnotu a chci ji uložit do jiné tabulky vyhodí to chybu:

Cannot insert the value NULL into column 'StateId', table 'TaskOrganizerDB.dbo.Requests'; column does not allow nulls. INSERT fails.

Zde je zdrojový kód:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" %>

<script runat="server">

</script>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:TaskOrganizerDBConnectionString %>" 
    DeleteCommand="DELETE FROM [Requests] WHERE [RequestId] = @RequestId" 
    InsertCommand="INSERT INTO [Requests] ([Title], [Description], [DateCreated], [DateExpiration], [CreatedBy], [StateId]) VALUES (@Title, @Description, @DateCreated, @DateExpiration, @CreatedBy, @StateId)" 
    SelectCommand="SELECT * FROM [Requests] WHERE ([RequestId] = @RequestId)" 
    
        UpdateCommand="UPDATE [Requests] SET [Title] = @Title, [Description] = @Description, [DateCreated] = @DateCreated, [DateExpiration] = @DateExpiration, [CreatedBy] = @CreatedBy, [StateId] = @StateId WHERE [RequestId] = @RequestId">
        <SelectParameters>
            <asp:QueryStringParameter Name="RequestId" QueryStringField="id" Type="Int32" />
        </SelectParameters>
        <DeleteParameters>
            <asp:Parameter Name="RequestId" Type="Int32" />
        </DeleteParameters>
        <UpdateParameters>
            <asp:Parameter Name="Title" Type="String" />
            <asp:Parameter Name="Description" Type="String" />
            <asp:Parameter Name="DateCreated" Type="DateTime" />
            <asp:Parameter Name="DateExpiration" Type="DateTime" />
            <asp:Parameter Name="CreatedBy" Type="Int32" />
            <asp:Parameter Name="StateId" Type="Int32" />
            <asp:Parameter Name="RequestId" Type="Int32" />
        </UpdateParameters>
        <InsertParameters>
            <asp:Parameter Name="Title" Type="String" />
            <asp:Parameter Name="Description" Type="String" />
            <asp:Parameter Name="DateCreated" Type="DateTime" />
            <asp:Parameter Name="DateExpiration" Type="DateTime" />
            <asp:Parameter Name="CreatedBy" Type="Int32" />
            <asp:Parameter Name="StateId" Type="Int32" />
        </InsertParameters>
</asp:SqlDataSource>

<asp:SqlDataSource ID="sdsState" runat="server" 
ConnectionString="<%$ ConnectionStrings:TaskOrganizerDBConnectionString2 %>" 
SelectCommand="SELECT StateId AS StateID, State FROM States">
</asp:SqlDataSource>    

    <asp:FormView ID="FormView1" runat="server" DataKeyNames="RequestId" 
    DataSourceID="SqlDataSource1" DefaultMode="Insert">
        <EditItemTemplate>
            RequestId:
            <asp:Label ID="RequestIdLabel1" runat="server" 
                Text='<%# Eval("RequestId") %>' />
            <br />
            Title:
            <asp:TextBox ID="TitleTextBox" runat="server" Text='<%# Bind("Title") %>' />
            <br />
            Description:
            <asp:TextBox ID="DescriptionTextBox" runat="server" 
                Text='<%# Bind("Description") %>' />
            <br />
            DateCreated:
            <asp:TextBox ID="DateCreatedTextBox" runat="server" 
                Text='<%# Bind("DateCreated") %>' />
            <br />
            DateExpiration:
            <asp:TextBox ID="DateExpirationTextBox" runat="server" 
                Text='<%# Bind("DateExpiration") %>' />
            <br />
            CreatedBy:
            <asp:TextBox ID="CreatedByTextBox" runat="server" 
                Text='<%# Bind("CreatedBy") %>' />
            <br />
            StateId:
            <asp:TextBox ID="StateIdTextBox" runat="server" Text='<%# Bind("StateId") %>' />
            <br />
            <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" 
                CommandName="Update" Text="Update" />
            &nbsp;<asp:LinkButton ID="UpdateCancelButton" runat="server" 
                CausesValidation="False" CommandName="Cancel" Text="Cancel" />
        </EditItemTemplate>

        <InsertItemTemplate>
        
            <table>

                <tr>
                    <td>Titulek: </td>
                    <td><asp:TextBox ID="TitleTextBox" runat="server" Text='<%# Bind("Title") %>' /></td>
                </tr>
                <tr>
                    <td>Popis: </td>
                    <td><asp:TextBox ID="DescriptionTextBox" runat="server" Text='<%# Bind("Description") %>' /></td>
                </tr>

                <tr>
                    <td>Datum ukončení: </td>
                    <td><asp:TextBox ID="DateExpirationTextBox" runat="server" Text='<%# Bind("DateExpiration") %>' /></td>
                </tr>
                <tr>
                    <td>Vytvořeno: </td>
                    <td><asp:TextBox ID="CreatedByTextBox" runat="server" Text='<%# Bind("CreatedBy") %>' /></td>
                </tr>
                <tr>
                    <td>Stav: </td>
                    <td>
                    <asp:DropDownList ID="ddlState"  runat="server" DataSourceID="sdsState" DataTextField="State" 
                        DataValueField="StateID" SelectedValue='<%# Bind("StateId") %>' >
                    </asp:DropDownList>
                    </td>
                    
                    <!--<td><asp:TextBox ID="StateIdTextBox" runat="server" Text='<%# Bind("StateId") %>' /></td>-->
                </tr>
                <tr>
                    <td>Vypracovává: </td>
                    <td><asp:TextBox ID="UserIdTextBox" runat="server" Text='<%# Bind("UserId") %>' /></td>
                </tr>

            </table>

            <asp:Button ID="InsertButton" runat="server" CausesValidation="True" 
                CommandName="Insert" Text="Vložit" />
            &nbsp;<asp:Button ID="InsertCancelButton" runat="server" 
                CausesValidation="False" CommandName="Cancel" Text="Zrušit" />
        </InsertItemTemplate>

 

    </asp:FormView>
</asp:Content>


nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste pouzit udalost ItemInserting.

protected void FormView_ItemInserting(object sender, ListViewInsertEventArgs e)
{
  DropDownList ddl = e.Item.FindControl("ddlState") as DropDownList;

     if (ddl != null) 
     {
          e.Values["StateId"] = (Convert.ToInt32(ddl.SelectedValue));
      }

  }

nahlásit spamnahlásit spam 0 odpovědětodpovědět

porad ten samy error

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak to nepomohlo.. Nasel jsem tady podobný clanek a postupoval jsem podle nej ale nepomohla, zadna rada.. http://www.vbnet.cz/forum-tema--3315-dro...

Uz fakt nevim co dal. Nastavil jsem autoPostBack, zkusil jsem prepsat InsertCommand, podle clanku.. nefunguje to ani, kdyz tam zkusim dat ListBox.

To vypada, ze se hodnota nabinduje do parametru, ale uz se dal neodesle, protoze kdyz jsem tam omylem nazvy tech stavu, tak to hodilo, ze to chce int. A kdyz uz by to melo jit, tak to pokazdy hodi, ze atribut StateId nesmi byt prazdny. Nenapada nekoho neco?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Když jste vložil dropdownlist místo textboxu, je třeba v SQLDatasource také změnit typ aspparametru takto:

<asp:ControlParameter Name="stateID"  ControlID="FormView1$ddlState" Type="String" />

a to samozřejmě jak v Updateparameters tak Insertparameters. Pak by už neměl být problém.

To ControlID nemůže být jen "ddlState", protože je uvnitř "formview1"

http://bytes.com/topic/asp-net/answers/6...

Snad to pomůže.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě upřesňuji

<asp:ControlParameter Name="stateID"  ControlID="FormView1$ddlState" Type="String" 
              PropertyName="selectedindex"/>

aby z dropdownlistu bral index, nikoli text

nahlásit spamnahlásit spam 0 odpovědětodpovědět

uz to funguje dekuji moc.. mohl by mi jeste nekdo vysvetlit proc je to tak??

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback