webForumDet fria alternativet

C# och DataSet - objekt kan inte omvandlas till DataSet

.NET

4 svar · 955 visningar · startad av m_soderlund

Medlem sedan sep. 20026 425 inlägg
Frågan#1

Jag använder koden nedan för paging i C#, mest för att testa.
Motsvarande kod i VB.NET fungerar helt felfritt, men när jag kör denna C#-version
så får jag detta felmeddelande:

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0029: Cannot implicitly convert type 'object' to 'System.Data.DataSet'

Source Error:

Line 37: void DoDataBind()
Line 38: {
Line 39: ds = ViewState["DataSet"];
Line 40: dg1.DataSource = ds.Tables["tbl"].DefaultView;
Line 41: dg1.DataBind();

Naturligtvis har det att göra med
konvertering av objekt till DataSet, men hur konverterar jag? Här kommer hela min C#-kod (fetmarkerat = där problemet ligger):

<%@ Page Language="C#" Strict="False" Debug="True" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

    DataSet ds = new DataSet();

    void Page_Load()
    {
    if(!Page.IsPostBack)
    {

      string CnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("../db2.mdb");
      string SQL = "SELECT Namn FROM tbl";
      OleDbConnection Cn = new OleDbConnection(CnStr);
      OleDbDataAdapter objAdapter = new OleDbDataAdapter(SQL, Cn);

          objAdapter.Fill(ds, "tbl");
          dg1.DataSource = ds.Tables["tbl"].DefaultView;
          dg1.DataBind();
          ViewState["DataSet"]=ds;

      Cn.Close();

     }

     }

    void ChangePage(Object objSender, DataGridPageChangedEventArgs e)
    {
     dg1.CurrentPageIndex = e.NewPageIndex;
     DoDataBind();
    }

    void DoDataBind()
    {
     [b]ds = ViewState["DataSet"];[/b]
     dg1.DataSource = ds.Tables["tbl"].DefaultView;
     dg1.DataBind();
    }

</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
    <title>C# paging^DataGrid & DataSet</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>

    <form id="sharp" runat="server">
        <asp:datagrid id="dg1" runat="server" AllowPaging="True" PageSize="10" OnPageIndexChanged="ChangePage"
        AutoGenerateColumns="True" Gridlines="None">
            <PagerStyle Mode="NumericPages" />
        </asp:dataGrid>
    </form>

</body>
</html>

Motsvarande kod i VB.NET, kod som fungerar utmärkt:

<%@ Page Language="VB" Strict="False" Debug="True" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.Oledb" %>
<script runat="server">

    Dim objDataset as New Dataset()
    
    Sub Page_Load()
     If Not Page.IsPostBack Then
    
      Dim CnStr as string = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.mappath("../db2.mdb")
      Dim SQL as string = "SELECT Namn FROM tbl"
      Dim Cn as new OleDbConnection(CnStr)
      Dim objAdapter as new OledbDataAdapter(SQL, Cn)
    
          objAdapter.Fill(objDataSet, "tbl")
          dg1.DataSource = objDataSet.Tables("tbl").DefaultView
          dg1.DataBind()
          ViewState("Dataset")=objDataSet
    
      Cn.Close()
    
     End if
    End sub
    
    Sub ChangePage(objSender as Object, e as DataGridPageChangedEventArgs)
     dg1.CurrentPageIndex = e.NewPageIndex
     DoDataBind()
    End sub
    
    Sub DoDataBind()
     objDataset = ViewState("Dataset")
     dg1.DataSource = objDataset.Tables("tbl").Defaultview
     dg1.DataBind()
    End Sub

</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head>
    <title>VB paging^DataGrid & DataSet</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>

    <form runat="server">
        <asp:datagrid id="dg1" runat="server" AllowPaging="True" PageSize="10" OnPageIndexChanged="ChangePage"
        AutoGenerateColumns="True" Gridlines="None">
            <PagerStyle Mode="NumericPages" />
        </asp:dataGrid>
    </form>

</body>
</html>

Tacksam för hjälp! :D

Medlem sedan mars 20002 836 inlägg
#2

har du provat:

ds = [b](dataset)[/b]ViewState["DataSet"];

Har för mig att det är sättet man typar en variabel

cya,
/PatrikB

Medlem sedan sep. 20026 425 inlägg
#3

Tack för svaret, PatrikB! Jag har ej möjlighet att testa det hemma just nu, men på https://www.dileno.hel.nu/asp/c-sharp_paging.aspx så fungerar inga ASP.NET-sidor som använder sig av C#.
Däremot fungerar https://www.dileno.hel.nu/asp/vb_paging.aspx finfint... Vet någon vad DET kan bero på?

Medlem sedan sep. 20026 425 inlägg
#4

Det fungerade ej. :(
Återkommer efter nattens kodstrapatser. :D

Medlem sedan sep. 20026 425 inlägg
#5

Den här koden fungerade utmärkt:

ds = ([b]D[/b]ata[b]S[/b]et)ViewState["DataSet"];
257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)