2010-05-21 5 views
1

내 FromView에 문제가 있습니다. FormView에서 데이터베이스 테이블의 일부 데이터를 표시하고 싶습니다. 그러나 일부 데이터는 튜플 Int32에서 가져온 것이지만이 데이터는 문자열 인 TextBox에 있어야합니다.ASP.NET FormView : " 'System.Int32'형식의 개체를 'System.String'형식으로 변환 할 수 없습니다.

어떻게 이러한 Int32를 변환합니까?

FormView 및

protected void gvOrdersAdmin_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    fvDetailOrder.DataSource = objdsOrderID; 
    fvDetailOrder.DataBind(); // <-- HERE I GET THE ERROR 
} 

protected void objdsOrderID_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) 
{ 
    e.InputParameters["id"] = gvOrdersAdmin.DataKeys[gvOrdersAdmin.SelectedRow.RowIndex].Values[0]; 
} 

내 데이터 액세스를 레이어

public static DataTable getOrdersByID(string id) 
{ 
    string sql = "SELECT 'AUTHOR' = tblAuthors.FIRSTNAME + ' ' + tblAuthors.LASTNAME, tblBooks.*, tblGenres.*, tblLanguages.*, tblOrders.* FROM tblAuthors INNER JOIN tblBooks ON tblAuthors.AUTHOR_ID = tblBooks.AUTHOR_ID INNER JOIN tblGenres ON tblBooks.GENRE_ID = tblGenres.GENRE_ID INNER JOIN tblLanguages ON tblBooks.LANG_ID = tblLanguages.LANG_ID INNER JOIN tblOrders ON tblBooks.BOOK_ID = tblOrders.BOOK_ID" 
     + " WHERE tblOrders.ID = @id;"; 

    SqlDataAdapter da = new SqlDataAdapter(sql, GetConnectionString()); 

    da.SelectCommand.Parameters["id"].Value = id; 

    DataSet ds = new DataSet(); 
    da.Fill(ds, "Orders"); 

    return ds.Tables["Orders"]; 
} 

고마워 뒤에 내 ObjectDataSource를

<asp:FormView ID="fvDetailOrder" runat="server"> 
<ItemTemplate> 
     Aantal:<br /> 
     <asp:Label CssClass="txtBox" ID="Label15" runat="server" Text='<%# Eval("COUNT") %>' /><br /> 
     Prijs:<br /> 
     <asp:Label CssClass="txtBox" ID="Label16" runat="server" Text='<%# Eval("PRICE") %>' /><br /> 
     Korting:<br /> 
     <asp:Label CssClass="txtBox" ID="Label17" runat="server" Text='' /><br /> 
     Totaal:<br /> 
     <asp:Label CssClass="txtBox" ID="Label18" runat="server" Text='<%# Eval("AMOUNT") %>' /><br /> 
     Betaald:<br /> 
     <asp:Label CssClass="txtBox" ID="Label19" runat="server" Text='<%# Eval("PAID") %>' /><br /> 
     Datum betaling:<br /> 
     <asp:Label CssClass="txtBox" ID="Label20" runat="server" Text='<%# Eval("PDATE") %>' /><br /> 
    </ItemTemplate> 
</asp:FormView> 

<asp:ObjectDataSource ID="objdsOrderID" runat="server" 
    OnSelecting="objdsOrderID_Selecting" SelectMethod="getOrdersByID" 
    TypeName="DAL.OrdersDAL"> 
    <SelectParameters> 
     <asp:Parameter Name="id" Type="Int32" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

내 코드입니다.

답변

5

매개 변수 "id"의 값을 string 유형으로 설정합니다. 그러나 tblOrders.ID는 int입니다.

이 시도 :

da.SelectCommand.Parameters["id"].Value = Int32.Parse(id); 

또는이 (이전 코드보다 더 빠르고 안전 조금 작동) :

var table = CreateDataTable(); 
new SqlDataAdapter(command).Fill(table); 
return table; 
:

int i; 
if (Int32.TryParse(id, out i)) 
{ 
    da.SelectCommand.Parameters["id"].Value = i; 
} 
else 
{ 
    throw new ArgumentException("id"); 
} 

을 또한 그것은 다음에 무엇을 더 나은 데이터 세트 대신

1

데이터 집합을 채우기 전에 필요한 캐스트는 어떻게해야합니까?

protected void gvOrdersAdmin_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    T objdsOrderIDAUX = default(T); 
    foreach(var item in objdsOrderID) 
    { 
     objdsOrderIDAUX.propertyBLA = item.propertyBLA.ToString(); 
     objdsOrderIDAUX.propertyBLO = item.propertyBLO.ToString(); 
     objdsOrderIDAUX.propertyBLUM = item.propertyBLUM.ToString(); 
    } 
    fvDetailOrder.DataSource = objdsOrderIDAUX; 

    HERE I THINK YOU WILL NOT GET THE ERROR --> fvDetailOrder.DataBind(); 
} 
+0

답장을 보내 주셔서 감사합니다. – Vinzcent

관련 문제