Avatar billede pelkjaer Nybegynder
15. november 2003 - 18:21 Der er 2 kommentarer og
1 løsning

nested datagrid - fejl

Hey

Når jeg forsøger at neste et DataGrid med et andet, får jeg flg. fejl:

System.InvalidCastException: Specified cast is not valid

og min stack trace (som jeg ikke fatter):

[InvalidCastException: Specified cast is not valid.]
  emotor.builder.filearchive.filearchieve_viewFiles.showFiles(Object sender, DataGridItemEventArgs e) +88
  System.Web.UI.WebControls.DataGrid.OnItemDataBound(DataGridItemEventArgs e) +110
  System.Web.UI.WebControls.DataGrid.CreateItem(Int32 itemIndex, Int32 dataSourceIndex, ListItemType itemType, Boolean dataBind, Object dataItem, DataGridColumn[] columns, TableRowCollection rows, PagedDataSource pagedDataSource) +181
  System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean useDataSource) +1408
  System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e) +49
  System.Web.UI.WebControls.BaseDataList.DataBind() +23
  emotor.builder.filearchive.filearchieve_viewFiles.showFolders() +250
  emotor.builder.filearchive.filearchieve_viewFiles.Page_Load(Object sender, EventArgs e) +58
  System.Web.UI.Control.OnLoad(EventArgs e) +67
  System.Web.UI.Control.LoadRecursive() +29
  System.Web.UI.Page.ProcessRequestMain() +724


Mine funktion ser ud som følger:

    // Show fake folders (Master DataGrid)
    protected void showFolders() {
      // Set SQL Query
      SqlString = "SELECT folders.id AS sqlMasterID, folders.folderName FROM folders ORDER BY folders.folderName";
      SqlStringDetails = "SELECT filearchive.id AS sqlDetailID, filearchive.fileName, filearchive.folderID FROM filearchive ORDER BY filearchive.fileName";

      // Create and fill Master/Details DataAdapter objects
      CoreLab.MySql.MySqlConnection Conn = OpenMySqlConnection();
      Conn.Open();
      // Master
      CoreLab.MySql.MySqlDataAdapter objAdapterMaster = new CoreLab.MySql.MySqlDataAdapter(SqlString, Conn);
      // Detail
      CoreLab.MySql.MySqlDataAdapter objAdapterDetail = new CoreLab.MySql.MySqlDataAdapter(SqlStringDetails, Conn);
      Conn.Close();

      objAdapterMaster.Fill(ds,"Master");
      objAdapterDetail.Fill(ds,"Detail");

      dg.DataSource = ds.Tables["Master"];
      dg.DataBind();
    }

   
    // Show files (Detail DataGrid)
    protected void showFiles(object sender, DataGridItemEventArgs e) {
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
        // Build new DataGrid
        DataGrid dgDetails = new DataGrid();

        // Get Master ID
        //int masterID = e.Item.DataItem("sqlMasterID");
        int masterID = Int32.Parse(((System.Data.Common.DbDataRecord)e.Item.DataItem)["sqlMasterID"].ToString());
             
        // Create a DataView
        DataView dv = new DataView();
        dv = ds.Tables["Detail"].DefaultView;
        dv.RowFilter = "sqlMasterID=" + masterID;

        // Bind the data to the new DataGrid
        dgDetails.DataSource = dv;
        dgDetails.DataBind();

        // Add the DataGrid to the second column
        e.Item.Cells[1].Controls.Add(dgDetails);
      }
    }

og min webform:

<asp:DataGrid id=dg runat="server" AutoGenerateColumns="False" ShowHeader="False" OnItemDataBound="showFiles">
  <Columns>
    <asp:TemplateColumn HeaderText="mapper">
      <ItemTemplate><%#DataBinder.Eval(Container, "DataItem.folderName")%></ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="filer">
      <ItemTemplate>

      </ItemTemplate>
    </asp:TemplateColumn>
  </Columns>
</asp:DataGrid>

Nogle der kan hjælpe?
Avatar billede pelkjaer Nybegynder
15. november 2003 - 19:26 #1
Okay - har indsnævret problemet.
Kører jeg en

dv.RowFilter = "folderID='2'";

virker det..

så min fejl ligger i:

int masterID = Int32.Parse(((System.Data.Common.DbDataRecord)e.Item.DataItem)["sqlMasterID"].ToString());

(flg. er rettet også:
dv.RowFilter = "folderID='"+masterID +"'";
)
Avatar billede pelkjaer Nybegynder
15. november 2003 - 19:33 #2
Er løst med

        DataRowView drv = (DataRowView)e.Item.DataItem;
        int masterID = Convert.ToInt32(drv["sqlMasterID"]);
Avatar billede pelkjaer Nybegynder
15. november 2003 - 19:33 #3
hov svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester