2010-05-21 137 views
1

我的FromView有問題。 我想在我的FormView中顯示來自數據庫表的一些數據。但是一些數據來自於Int32,而這些數據應該在TextBox中,一個字符串。ASP.NET FormView:「類型'System.Int32'的對象無法轉換爲類型'System.String」

你如何轉換這些Int32的。

FormView控件和我的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> 

我的代碼背後

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"]; 
} 

非常感謝。

回答

5

設置參數「id」的值爲string。但tblOrders.ID是int的類型。

試試這個:

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

甚至這個(將工作一點比以前的代碼更快捷和安全):

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

而且它做的更好未來:

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

而不是使用DataSet

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 2010-05-21 15:09:18

相關問題