2015-01-14 12 views
4

다른 데이터베이스 테이블에 입력하기 위해 DetailsView 컨트롤에서 데이터를 검색하려고합니다. 나는 다른 사람들이 물어 본 다른 질문을 보았지만 그들의 질문은 SQL 데이터베이스에 액세스하려고하는 나의 상황에 맞지 않습니다. 궁극적으로 나는 필요한 답을 찾을 수 없었다.DetailsView에서 데이터 가져 오기

기본적으로 코드의 내 목적은 첫 번째 행이 대체로 변경되지 않는 정적 헤더이기 때문에 DetailsView의 두 번째 행을 추출하는 것입니다. 내 DetailsView는 위의 GridView 선택시 변경됩니다. 따라서 두 번째 행에서 데이터를 검색하려고하는데, 행 [2]의 사용법을 설명하면서 "셀 []"은 열을 참조합니다.

다음 코드를 사용하고 있습니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 

public partial class RealClientPurchase : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     clientnolbl.Text = Session["sClientNo"].ToString(); 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=D:\Desktop\TemporarySter\App_Data\legitdatabase.mdf;Integrated Security=True;Connect Timeout=30"); 
     try 
     { 
      con.Open(); 

      SqlCommand cmd; 
      string insertQuery = "insert into SalesOrders ([pQuotation#], pServices, pQty, pDescription, [p[Price/Unit]], pNetvalue, pProgress, pClientNo values (@quotationno,@services,@quantity,@description,@priceperunit,@netvalue,@progress,@clientno)"; 
      cmd = new SqlCommand(insertQuery, con); 



     cmd.Parameters.AddWithValue("@quotationno", DetailsView1.Rows[0].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@services", DetailsView1.Rows[1].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@quantity", DetailsView1.Rows[2].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@description", DetailsView1.Rows[3].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@priceperunit", DetailsView1.Rows[4].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@netvalue", DetailsView1.Rows[5].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@progress", "0%"); 
     cmd.Parameters.AddWithValue("@clientno", clientnolbl.Text.ToString()); 


      ScriptManager.RegisterStartupScript(this, this.GetType(), "redirect", 
       "alert('Purchase order has been submitted! Kindly proceed to checkout.'); window.location='" + 
       Request.ApplicationPath + "CurrentCheckout.aspx';", true); 

      con.Close(); 
     } 
     catch (Exception ex) 
     { 
      Response.Write("Error:" + ex.ToString()); 

     } 
    } 
} 

이는 영문 코드입니다 :

<%@ Page Title="" Language="C#" MasterPageFile="~/ClientPortal.master" AutoEventWireup="true" CodeFile="RealClientPurchase.aspx.cs" Inherits="RealClientPurchase" %> 

<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:Register1ConnectionString %>" SelectCommand="SELECT [qQuotationNo], [qServices], [qQuantity], [qDate] FROM [Quotations] WHERE ([qClientNo] = @qClientNo)"> 
     <SelectParameters> 
      <asp:SessionParameter Name="qClientNo" SessionField="sClientNo" Type="Int32" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:Register1ConnectionString %>" SelectCommand="SELECT [qQuotationNo], [qServices], [qQuantity], [qDescription], [qPricePerQty], [qTotalPayable] FROM [Quotations] WHERE ([qQuotationNo] = @qQuotationNo)"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="GridView1" Name="qQuotationNo" PropertyName="SelectedValue" Type="Int32" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 
    <asp:Label ID="clientnolbl" runat="server" Text="Label" Visible="False"></asp:Label> 
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="qQuotationNo" DataSourceID="SqlDataSource1" Height="125px" Width="452px" CellPadding="4" ForeColor="#333333" GridLines="None"> 
     <AlternatingRowStyle BackColor="White" /> 
     <Columns> 
      <asp:CommandField ShowSelectButton="True" /> 
      <asp:BoundField DataField="qQuotationNo" HeaderText="Quotation No" InsertVisible="False" ReadOnly="True" SortExpression="qQuotationNo" /> 
      <asp:BoundField DataField="qServices" HeaderText="Services" SortExpression="qServices" /> 
      <asp:BoundField DataField="qQuantity" HeaderText="Quantity" SortExpression="qQuantity" /> 
      <asp:BoundField DataField="qDate" HeaderText="Date" SortExpression="qDate" /> 
     </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:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataSourceID="SqlDataSource2" Height="50px" Width="452px" CellPadding="4" ForeColor="#333333" GridLines="None" DataKeyNames="qQuotationNo"> 
     <AlternatingRowStyle BackColor="White" /> 
     <CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" /> 
     <EditRowStyle BackColor="#2461BF" /> 
     <FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" /> 
     <Fields> 
      <asp:BoundField DataField="qQuotationNo" HeaderText="qQuotationNo" SortExpression="qQuotationNo" InsertVisible="False" ReadOnly="True" /> 
      <asp:BoundField DataField="qServices" HeaderText="qServices" ReadOnly="True" SortExpression="qServices" /> 
      <asp:BoundField DataField="qQuantity" HeaderText="qQuantity" SortExpression="qQuantity" ReadOnly="True" /> 
      <asp:BoundField DataField="qDescription" HeaderText="qDescription" SortExpression="qDescription" ReadOnly="True" /> 
      <asp:BoundField DataField="qPricePerQty" HeaderText="qPricePerQty" SortExpression="qPricePerQty" ReadOnly="True" /> 
      <asp:BoundField DataField="qTotalPayable" HeaderText="qTotalPayable" SortExpression="qTotalPayable" ReadOnly="True" /> 
     </Fields> 
     <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" /> 
    </asp:DetailsView> 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" /> 
    <br /> 
    <br /> 
    <br /> 
</asp:Content> 

Error:System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: index at System.Web.UI.ControlCollection.get_Item(Int32 index) at RealClientPurchase.Button1_Click(Object sender, EventArgs e) in d:\Desktop\RealClientPurchase.aspx.cs:line 27 

편집 :이 파일 뒤에 코드가 입니다

string insertQuery = "insert into SalesOrders ([pQuotation#], pServices, pQty, pDescription, [p[Price/Unit]], pNetvalue, pProgress, pClientNo values (@quotationno,@services,@quantity,@description,@priceperunit,@netvalue,@progress,@clientno)"; 
cmd = new SqlCommand(insertQuery, con) 

     cmd.Parameters.AddWithValue("@quotationno", DetailsView1.Rows[0].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@services", DetailsView1.Rows[1].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@quantity", DetailsView1.Rows[2].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@description", DetailsView1.Rows[3].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@priceperunit", DetailsView1.Rows[4].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@netvalue", DetailsView1.Rows[5].Cells[1].Text); 
     cmd.Parameters.AddWithValue("@progress", "0%"); 
     cmd.Parameters.AddWithValue("@clientno", clientnolbl.Text.ToString()); 

나는 다음과 같은 예외가 발생했습니다

+1

인덱스가 0부터 시작하지 않아야합니까? 두 번째 행의 경우 Row [1] 여야합니다. 마찬가지로 셀에도 마찬가지입니다. – Anurag

+1

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+0

@Anurag 선생님, 본질적으로 말하고자하는 것은 모든 데이터 필드에 대해 값을 가져 오려고하는 것입니다. 모두 행 [1] .Cells [1]이어야하지만 유일한 차이점이 있습니다. 통제 수단[]? –

답변

0

시도해 주시겠습니까 DetailsView1.Rows[0].Cells[0].Text?

DetailsView에는 BoundFields 만 있기 때문에 정상적으로 작동합니다.

감사합니다.

+0

현재로서는 예외가 발생하지 않았습니다. 제출 단추를 클릭하면 데이터가 데이터베이스에 입력되지 않습니다. –

+0

Sarah. 시도한 새 코드를 입력 할 게시물을 편집하십시오. – Anurag

+0

행 [0]에서 데이터를 사용할 수 있는지 확인하십시오. 처음에 두 번째 행에 대해 물어 보았고 행 [1] 등을 사용하려고했습니다. – Anurag

4

해결책을 찾았습니다.

데이터베이스 테이블의 필드를 "#"및 "["또는 "]"을 제외하도록 변경했습니다. SQL 문에서 이러한 기호가 제대로 작동하지 않습니다. 개정 된 코드는 다음과 같습니다.

SqlCommand cmd; 
      string insertQuery = "INSERT INTO SalesOrders (pQuotationNo, pServices, pQty, pDescription, pPricePerQty, pNetvalue, pProgress, pClientNo) values (@quotationno,@services,@quantity,@description,@priceperunit,@netvalue,@progress,@clientno)"; 
      cmd = new SqlCommand(insertQuery, con); 


      cmd.Parameters.AddWithValue("@quotationno", DetailsView1.Rows[0].Cells[1].Text.ToString()); 
      cmd.Parameters.AddWithValue("@services", DetailsView1.Rows[1].Cells[1].Text.ToString()); 
      cmd.Parameters.AddWithValue("@quantity", DetailsView1.Rows[2].Cells[1].Text.ToString()); 
      cmd.Parameters.AddWithValue("@description", DetailsView1.Rows[3].Cells[1].Text.ToString()); 
      cmd.Parameters.AddWithValue("@priceperunit", DetailsView1.Rows[4].Cells[1].Text.ToString()); 
      cmd.Parameters.AddWithValue("@netvalue", DetailsView1.Rows[5].Cells[1].Text.ToString()); 
      cmd.Parameters.AddWithValue("@progress", "0%"); 
      cmd.Parameters.AddWithValue("@clientno", clientnolbl.Text.ToString()); 
      cmd.ExecuteNonQuery(); 
+0

솔루션을 얻은 것이 좋음. – Anurag