Vraag & Antwoord

Webprogrammeren & scripting

Van VB.NET naar C#

10 antwoorden
  • Ik krijg het niet voor elkaar. :evil: Voordat de gebruiker een record uit een DataGrid kan verwijderen toon ik eerst een ConfirmBoxje. In VB.NET is de onderstaande code correct. [code:1:f74069a861] Sub dgPopularFAQs_ItemDataBound(sender as Object, e as DataGridItemEventArgs) ' First, make sure we're NOT dealing with a Header or Footer row If e.Item.ItemType <> ListItemType.Header AND e.Item.ItemType <> ListItemType.Footer then 'Now, reference the LinkButton control that the Delete ButtonColumn has been rendered to [b] Dim deleteButton as LinkButton = e.Item.Cells(0).Controls(0) 'We can now add the onclick event handler deleteButton.Attributes("onclick") = "javascript:return confirm('Are you sure you want to delete FAQ #" & _ DataBinder.Eval(e.Item.DataItem, "FAQID") & "?')" [/b] End If End Sub </script> <form runat="server"> <asp:label id="lblResults" Font-Bold="True" runat="server" Font-Italic="True" ForeColor="#aa0000" /> <p> <asp:datagrid id="dgPopularFAQs" runat="server" AutoGenerateColumns="False" HeaderStyle-HorizontalAlign="Center" HeaderStyle-BackColor="Red" HeaderStyle-ForeColor="White" HeaderStyle-Font-Bold="True" HeaderStyle-Font-Name="Verdana" AlternatingItemStyle-BackColor="#dddddd" ItemStyle-Font-Name="Verdana" DataKeyField="FAQID" OnDeleteCommand="dgPopularFAQs_Delete" OnItemDataBound="dgPopularFAQs_ItemDataBound"> <Columns> <asp:ButtonColumn Text="Delete" CommandName="Delete" /> <asp:BoundColumn DataField="FAQID" HeaderText="FAQ ID" ItemStyle-HorizontalAlign="Center" /> <asp:BoundColumn DataField="Description" HeaderText="Question" /> </Columns> </asp:datagrid> </form> [/code:1:f74069a861] Het onderstaande gedeelte moet ik omzetten naar C# [code:1:f74069a861]Dim deleteButton as LinkButton = e.Item.Cells(0).Controls(0) 'We can now add the onclick event handler deleteButton.Attributes("onclick") = "javascript:return confirm('Are you sure you want to delete FAQ #" & _ DataBinder.Eval(e.Item.DataItem, "FAQID") & "?')" [/b] [/code:1:f74069a861] en ik heb het tot nu toe als volgt: [code:1:f74069a861] Button DeleteButton = (DeleteButton)e.Item.Cells[8].Controls[0]; DeleteButton.Attributes("onclick") = "javascript:return " + "confirm('are you sure you want to delete this " + Databinder.Eval(e.Item.DataItem, "NewsItemID") & "?')"; [/code:1:f74069a861] Vervolgens krijg ik de eerste regel volgende foutmelding: Compiler Error Message: CS0246: The type or namespace name 'DeleteButton' could not be found (are you missing a using directive or an assembly reference?) Nu heb ik zelf het idee dat ik iets moet importeren maar in het voorbeeld zelf wordt dat [u:f74069a861]niet [/u:f74069a861]gedaan. Wie weet wat te doen?
  • 1) Je gebruikt in VB.NET "deleteButton" en in C# "DeleteButton" (let op het case-sensetive verhaal), maar dat zou niet echt uit mogen maken hier (al vind Microsoft dat je variabelen met een kleine letter moet laten beginnen). 2) Je gebruikt "DeleteButton" als class bij je type-cast "(DeleteButton)e.Item.Cells[8].Controls[0]", daar waar je vast die waarde naar een item van de klasse "Button" wilt vertalen:[code:1:a93729706d]Button deleteButton = (Button)e.Item.Cells[8].Controls[0];[/code:1:a93729706d]
  • Je hebt helemaal gelijk Bill. Volgend probleem: [b:9b89ba61c0]Compiler Error Message: CS0117: 'ASP.Nieuwsberichten_overzicht_aspx' does not contain a definition for 'dgNewsItem_DataBound'[/b:9b89ba61c0] <asp:datagrid id="dgNewsItem" runat="server" DataMember="NewsItem" DataKeyField="NewsItemID" EditItemStyle-ForeColor="#FFFFFF" EditItemStyle-BackColor="#5767AB" AlternatingItemStyle-BackColor="#CCFFFF" FooterStyle-ForeColor="#FFFFFF" FooterStyle-BackColor="#333333" OnEditCommand="DataGrid_Edit" OnDeleteCommand="DataGrid_Delete" ShowFooter="True" BackColor="White" AutoGenerateColumns="False" [b:9b89ba61c0]OnItemDataBound="dgNewsItem_DataBound">[/b:9b89ba61c0]
  • Die methode bestaat dus niet volgens de compiler. Zonder volledig script kunnen we hier natuurlijk niks over zeggen (tenzij het het bovenstaande script is, dan bestaat die methode dus niet ;)).
  • Onderstaand alle relevante code. [code:1:803bd960b4] <%@ Register tagprefix="uc" tagname="menu" src="uc_menu.ascx" %> <%@ Import Namespace="System.Data.OleDb" %> <%@ Import Namespace="System.Data" %> <%@ Page Language="C#" debug="true"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <HTML> <HEAD id="Head1"> <title>titel</title> <script runat="server"> private void dgNewsItem_ItemDataBound(object sender, DataGridItemEventArgs e) { Button deleteButton = (Button)e.Item.Cells[9].Controls[0]; deleteButton.Attributes.Add("onclick", "javascript:return confirm('are you sure you want to delete this #Databinder.Eval(e.Item.DataItem, 'NewsItemID')')"); } private void DataGrid_Delete(Object sender, DataGridCommandEventArgs e) { string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("blabla") + ""; int keyValue = (int)dgNewsItem.DataKeys[e.Item.ItemIndex]; string CommandText = "DELETE FROM NewsItem WHERE NewsItemID=" + keyValue; OleDbConnection Conn = new OleDbConnection(ConnectionString); OleDbCommand DeleteCommand = new OleDbCommand(CommandText, Conn); Conn.Open(); DeleteCommand.ExecuteNonQuery(); Conn.Close(); dgNewsItem.CurrentPageIndex = 0; dgNewsItem.EditItemIndex = -1; } </script> <LINK href="css/main.css" type="text/css" rel="stylesheet"> </HEAD> <body> <form id="form1" method="post" runat="server"> <div id="wrap"> <div id="formulier" style="FLOAT: left"> </div> <asp:datagrid id="dgNewsItem" runat="server" DataMember="NewsItem" DataKeyField="NewsItemID" OnEditCommand="DataGrid_Edit" OnDeleteCommand="DataGrid_Delete" AutoGenerateColumns="False" OnItemDataBound="dgNewsItem_DataBound"> <columns> <asp:boundcolumn DataField="NewsItemID" HeaderText="NewsItemID" ReadOnly="True" Visible="False"></asp:boundcolumn> <asp:boundcolumn DataField="Veld1" HeaderText="datum" DataFormatString="{0:dd-MM-yyyy}" ReadOnly="True"></asp:boundcolumn> <asp:boundcolumn DataField="Veld2" HeaderText="Kop" ReadOnly="True"></asp:boundcolumn> <asp:boundcolumn DataField="Veld3" HeaderText="Omschrijving" ReadOnly="True" Visible="False"></asp:boundcolumn> <asp:boundcolumn DataField="Veld4" ReadOnly="True" Visible="False"></asp:boundcolumn> <asp:boundcolumn DataField="Veld5" ReadOnly="True" Visible="False"></asp:boundcolumn> <asp:boundcolumn DataField="Veld6" ReadOnly="True" Visible="False"></asp:boundcolumn> <asp:ButtonColumn CommandName="Edit" Text="Details"></asp:ButtonColumn> <asp:ButtonColumn CommandName="Delete" Text="Verwijderen"></asp:ButtonColumn> </columns> </asp:datagrid> </div> </form> </body> </HTML> [/code:1:803bd960b4]
  • Oeps, ik zie een dikke blunder...weer dankzij Bill :lol:
  • Even een opmerking tussendoor: verdiep je in het zogenaamde "codebehind", dat werkt een stuk beter en duidelijker.
  • Zeker, maar die mag ik helaas niet gebruiken van de 'opdrachtgever' Overigens werkt het nog steeds niet... even terug, ik had de naam van de 'void' niet correct, dat had je goed gezien. Nu, krijg ik de volgende melding: Mijn sleutelwaarde staat in de eerste kolom (0 dus) Maar ik ken OnItemDataBound helemaal niet en ik heb geen idee welke waarde hij doorgeeft. Maar dat zal de sleutelwaarde zijn want anders zie ik het niet goedkomen. Goed, de foutmelding: Specified argument was out of the range of valid values. Parameter name: index. Er wordt dus een foute waarde doorgegeven maar welke is dan de juist.
  • [code:1:9b30e7eec8] Button deleteButton = (Button)e.Item.Cells[9].Controls[0][/code:1:9b30e7eec8] In C# beginnen arrays met een 0 index, dus Cells[9] bestaat niet en moet Cells[8] zijn. /e
  • Klopt. typefoutje, maar dat werkt ook niet.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.