2012-02-28 9 views
0

私は次のように私のデータベース内の2つのテーブルを持っている:DropDownListから値を選択して、提出された提案のステータスをGridViewで更新/挿入する方法を教えてください。

提案表:ID、タイトル、説明、StatusID ...など

SuggestionsStatus表:ID、ステータス

私は示すために、GridViewコントロールを使用しています提案と最後の列には、それぞれの提案のステータスを選択するためのDropDownListを配置します。さて、DropDownListからステータスを選択して、提出された提案のステータスを更新しようとしたときに、その値が選択されましたが、データベースに挿入されませんでした(つまり、StatusIDカラムにNULL値があります)。提案テーブル)と私は理由を知らない。

私のASP.NETコード:私のコードビハインド

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
         AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="ID" 
         width="950px" CssClass="mGrid" 
         AlternatingRowStyle-CssClass="alt" 
         RowStyle-HorizontalAlign="Center" 
         DataSourceID="SqlDataSource1" 
         OnRowDataBound="GridView1_RowDataBound" > 
      <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
      <HeaderStyle Font-Bold = "true" ForeColor="Black" Height="20px"/> 
      <Columns> 
       <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
        ReadOnly="True" SortExpression="ID" /> 
       <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> 
       <asp:BoundField DataField="Description" HeaderText="Description" 
        SortExpression="Description" /> 
       <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
       <asp:BoundField DataField="Username" HeaderText="Username" 
        SortExpression="Username" /> 
       <asp:BoundField DataField="DivisionShortcut" HeaderText="Division" 
        SortExpression="DivisionShortcut" /> 
       <asp:TemplateField HeaderText="Status"> 
        <ItemTemplate> 
         <asp:DropDownList ID="DropDownList" runat="server" DataSourceID="SqlDataSource2" 
              Font-Bold="True" ForeColor="#006666" AppendDataBoundItems="false" 
              DataTextField="Status" DataValueField="ID" AutoPostBack="true" 
              OnDataBound="DropDownList_DataBound"> 
         </asp:DropDownList> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
      SelectCommand="SELECT  dbo.SafetySuggestionsLog.ID, dbo.SafetySuggestionsLog.Title, dbo.SafetySuggestionsLog.Description, dbo.employee.Name, dbo.SafetySuggestionsLog.Username, 
         dbo.Divisions.DivisionShortcut 
FROM   dbo.employee INNER JOIN 
         dbo.SafetySuggestionsLog ON dbo.employee.Username = dbo.SafetySuggestionsLog.Username INNER JOIN 
         dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode" 
         FilterExpression="[DivisionShortcut] like '{0}%'"> 

         <FilterParameters> 
         <asp:ControlParameter ControlID="ddlDivision" Name="DivisionShortcut" 
               PropertyName="SelectedValue" Type="String" /> 
        </FilterParameters> 
     </asp:SqlDataSource> 

     <%--For the DropDownList--%> 
     <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
     ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
     SelectCommand="SELECT * FROM [SafetySuggestionsStatus]"></asp:SqlDataSource> 

protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DropDownList ddl = (DropDownList)sender; 
    int suggestionStatus = int.Parse(ddl.SelectedValue); 
    //For inserting the status in the database 
    string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=psspdbTest;Integrated Security=True"; 
    string insertCommand = "INSERT INTO SafetySuggestionsLog (StatusID) values(@StatusID)"; 
    using (SqlConnection conn = new SqlConnection(connString)) 
    { 
     conn.Open(); 
     using (SqlCommand cmd = new SqlCommand(insertCommand, conn)) 
     { 
      cmd.Parameters.Clear(); 
      cmd.Parameters.AddWithValue("@StatusID", suggestionStatus); 
      cmd.ExecuteNonQuery(); 
     } 
     conn.Close(); 
    } 
} 

上記のように、私は)(DropDownList_SelectedIndexChangedを変更したが、それは私に次のエラーを与えた:

Cannot insert the value NULL into column 'Title', table 'psspdbTest.dbo.SafetySuggestionsLog'; column does not allow nulls. INSERT fails. The statement has been terminated.

ステータスを更新できるようにこの問題を修正する方法データベース内の(GridView)に提出された提案の1つ

+1

データベースへのINSERTのコードはどこですか? 'GridView'コントロールはネイティブに挿入をサポートしていません。通常は、' DetailsView'かそれを使用します。 – jadarnel27

答えて

2

ドロップダウンリストの値が正しく変更されたときに操作する必要がありますか? そのためにはOnSelectedIndexChangedメソッドを使用する必要があります。ドロップダウンの値が変更されると、このメソッドが起動します。ここでコードを書くことができます。

あなたのデータベースはここにロジックを挿入していないと思います。 ASPでのドロップダウンリスト これらのリンクの検索

protected void DBList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
// inserting into database code here 
} 

ファイル.csファイルに書き込むさて、この

<asp:DropDownList ID="DBList" runat="server" Height="20px" Width="226px" OnSelectedIndexChanged ="DBList_SelectedIndexChanged" AutoPostBack="true"> 
       </asp:DropDownList> 

を追加してくださいlink1link2

+1

コードスニペットを私に提供してもらえますか? –

+0

まず、お世話になりました。第2に、あなたの情報のために、DropDownListはGridViewの内部にあるので、選択した値をGridViewに挿入する必要があります。私はそれをやろうとしましたが、失敗しました。理由はわかりません。上のコードを見てください。 –

0

私はあなたがテーブル に挿入しようとしていることを示唆しています例えば4列ある ID、Title、Description、StatusID 他のすべての文字列を無視してstatusidを挿入しようとしています。col欄とエラーがタイトル列がヌルを許可しないと言っています ヌルを受け入れる場合は ですので、テーブルの設計から許可してください。NULLをtrueにするタイトル列

関連する問題