2016-09-09 7 views
0

まだ完全な初心者がAsp.Netであり、Google検索で予期された正しい結果が得られませんでした。すでに重複した質問がある場合はお詫び申し上げます。編集可能なGridViewから値を取得し、それをSqlDataSource-BackEndのパラメータとして使用する

私が持っている問題は、私は、以下の編集可能なGridViewのを持っているということである。ここでは

<asp:GridView ID="gvCodes" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" DataSourceID="CodesDataSource" CellPadding="3" Width="474px" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" OnRowDataBound="gvCodes_RowDataBound"> 
    <Columns> 
     <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" Visible="false" InsertVisible="False" SortExpression="Id"></asp:BoundField> 
     <asp:BoundField DataField="Code" HeaderText="Code" ReadOnly="True" SortExpression="Code"></asp:BoundField> 
     <asp:BoundField DataField="Manager_Name" HeaderText="Manager Name" SortExpression="Manager_Name"></asp:BoundField> 
     <asp:BoundField DataField="Created_Date" HeaderText="Created Date" ReadOnly="True" SortExpression="Created_Date" DataFormatString="{0:MM/d/yyyy}"></asp:BoundField> 
     <asp:CommandField ShowEditButton="True"></asp:CommandField> 
    </Columns> 
</asp:GridView> 

は私のSqlDataSourceです:

<asp:SqlDataSource runat="server" ID="CodesDataSource" DeleteCommand="DELETE FROM [Codes] WHERE [Id] = @Id" InsertCommand="INSERT INTO [Codes] ([Manager_Name]) VALUES (@Manager_Name, @Created_Date)" SelectCommand="SELECT * FROM [Codes] WHERE [ProjProjectID] = 'DynamicValue'" UpdateCommand="UPDATE [Codes] SET [Manager_Name] = @Manager_Name, [Created_Date] = GETDATE() WHERE [Id] = @Id AND [ProjProjectID] = 'DynamicValue'" OnSelected="CodesDataSource_Selected"> 
    <DeleteParameters> 
     <asp:Parameter Name="Id" Type="Int32"></asp:Parameter> 
    </DeleteParameters> 
    <InsertParameters> 
     <asp:Parameter Name="Manager_Name" Type="String"></asp:Parameter> 
     <asp:Parameter DbType="Date" Name="Created_Date"></asp:Parameter> 
    </InsertParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="Manager_Name" Type="String"></asp:Parameter> 
     <asp:Parameter DbType="Date" Name="Created_Date"></asp:Parameter> 
     <asp:Parameter Name="Id" Type="Int32"></asp:Parameter> 
    </UpdateParameters> 
</asp:SqlDataSource> 

私が、バックエンドにすべてのSqlDataSourceを移動できるようにしたいです少なくとも私がどこでprojProjectIDを変更できるようにパラメータ。これは私が試したものです:

____はエラーが発生した場所です。文字列値が必要です。どのようにすればよいかわからないのは、グリッドビューでユーザが編集した特定の値をその___に入れることです。私は、Manager_Nameが機能するだけです。イベントgvCodes_RowUpdating

どうもありがとう

答えて

0

は、次のように更新する機能を処理します。

protected void gvCodes_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    GridViewRow row = (GridViewRow)gvCodes.Rows[e.RowIndex]; 
    TextBox textID = (TextBox)row.Cells[0].Controls[0]; 
    TextBox textDate = (TextBox)row.Cells[0].Controls[0]; 
    TextBox textManagerName = (TextBox)row.Cells[0].Controls[0]; 

    CodesDataSource.ConnectionString = ba.connection; 
    CodesDataSource.SelectCommand = "SELECT * FROM Codes WHERE ProjProjectID = '" + projProjectID + "'"; 
    CodesDataSource.UpdateCommand = "UPDATE Codes SET Manager_Name = @Manager_Name, Created_Date = GETDATE() WHERE Id = @Id AND ProjProjectID = '" + projProjectID + "'"; 

    CodesDataSource.UpdateParameters.Add("Manager_Name", TypeCode.String, textManagerName.Text); 
    CodesDataSource.UpdateParameters.Add("Created_Date", TypeCode.String, textDate.Text); 
    CodesDataSource.UpdateParameters.Add("Id", TypeCode.String, textID.Text); 
} 

アドバイス: パラメータを使用するには、SQLインジェクション攻撃を防ぐので、あなたもprojProjectIDのようなパラメータとしてすべてを含むべきであるのに役立ちます。また、バックエンドでSqlDataSourceの代わりにSqlCommandを使用する必要があります。

string updateStatement = "UPDATE Codes SET Manager_Name = @Manager_Name, Created_Date = GETDATE() WHERE Id = @Id AND ProjProjectID = @projectID"; 
    using (SqlConnection connection = new SqlConnection(ConnectionString()) 
    using (SqlCommand cmd = new SqlCommand(updateStatement, connection)) { 
    connection.Open(); 
    cmd.Parameters.Add(new SqlParameter("@Manager_Name", textManagerName.Text)); 
    cmd.Parameters.Add(new SqlParameter("@Created_Date", textDate.Text)); 
    cmd.Parameters.Add(new SqlParameter("@Id", textID.Text)); 
    cmd.Parameters.Add(new SqlParameter("@projectID", projProjectID)); 
    cmd.ExecuteNonQuery(); 
+1

ありがとうRicha!私の質問に答えて、私にアドバイスをくれました:) – mezzoforte006

関連する問題