Avatar billede brian-johansen Nybegynder
25. august 2005 - 01:31 Der er 19 kommentarer og
1 løsning

DataGrid update

Hej,

Jeg har prøvet at kigge rundt omkring på nettet, men uden held.

Jeg har lavet et datagrid hvor jeg kan se forskellige ting. Jeg har så en link knap, der hedder åben dag. Jeg vil gerne kunne gøre sådan at når man trykker på knappen så opdatere den et felt i db der hedder emne.

Hvordan gør jeg det nemmest ?

mvh Brian
Avatar billede snepnet Nybegynder
25. august 2005 - 14:32 #1
sådan noget som det her i aspx'en :

<asp:DataGrid ID="grid" runat="server" AutoGenerateColumns="False" OnItemCommand="grid_ItemCommand">
    <Columns>
        <asp:TemplateColumn>
            <ItemTemplate>
                <asp:TextBox ID="txtText" runat="server"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateColumn>               
        <asp:ButtonColumn ButtonType="PushButton" Text="Save changes" CommandName="save" ></asp:ButtonColumn>
    </Columns>           
</asp:DataGrid>   

og sådan her i din codebehind:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.grid.DataSource = new string[] { "hej", "med", "dig" };
        this.grid.DataBind();
    }
}
protected void grid_ItemCommand(object source, DataGridCommandEventArgs e)
{
    if (e.CommandName == "save")
    {
        TextBox tb = e.Item.FindControl("txtText") as TextBox;
        string textToSave = tb.Text;
    }
}

så skulle du have lidt at gå videre med.

mvh
Avatar billede brian-johansen Nybegynder
25. august 2005 - 15:54 #2
okay super, jeg tester det lige i aften. Tak for hjælpen
Avatar billede brian-johansen Nybegynder
27. august 2005 - 00:58 #3
Jeg kan ikke rigtig finde ud af det... men jeg har fundet ud af at det var en delete command jeg skulle bruge og jeg har funde det til at se lidt bedre ud.
Men jeg synes ikke rigtig jeg kan få den til at gøre hverken det ene eller det andet.

Jeg har prøvet både med noget javascript og noget kode jeg har fundet på nettet og det har ikke virket.

Jeg har kun det her nu:

private void Gridclosed_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
    if (e.CommandName == "delete")
}
Avatar billede snepnet Nybegynder
27. august 2005 - 10:47 #4
en deletecommand er en "standard-kommando", hvilket betyder at griddet til dels har noget indbygget omkring det - og du kan bruge det sådan her :

<asp:DataGrid ID="grid" runat="server" AutoGenerateColumns="False" OnDeleteCommand="grid_DeleteCommand">
    <Columns>
        <asp:TemplateColumn>
            <ItemTemplate>
                <asp:TextBox ID="txtText" runat="server"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateColumn>               
        <asp:ButtonColumn ButtonType="PushButton" Text="Save changes" CommandName="save" ></asp:ButtonColumn>
    </Columns>           
</asp:DataGrid>   

protected void grid_DeleteCommand(object source, DataGridCommandEventArgs e)
{

}

det gør dog ikke nogen forskel om du laver det som vist i 25/08-2005 14:32:53, eller du behytter de "indbyggede muligheder" - det er nøjagtig det samme.

griddet kan ikke selv udføre nogle som helst af de ting det praler med (sortering, editering, update, delete mv), så du må skrive noget kode i din handler....)

du må gerne lige sende koden i aspx'en også, så jeg kan se om alt er ok.

mvh
Avatar billede brian-johansen Nybegynder
27. august 2005 - 12:28 #5
Her er hele <body> koden for closed.aspx:

<%@ Page language="c#" Codebehind="closed.aspx.cs" AutoEventWireup="false" Inherits="webkalender.closed" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

<body MS_POSITIONING="GridLayout">
<form id="closed" method="post" runat="server">
<asp:datagrid id="Gridclosed" style="Z-INDEX: 101; LEFT: 28px; POSITION: absolute; TOP: 13px" runat="server" AllowPaging="True" AutoGenerateColumns="False" CellPadding="3" BackColor="White" BorderWidth="1px" BorderStyle="None" BorderColor="#CCCCCC">
<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#669999"></SelectedItemStyle>
<ItemStyle ForeColor="#000066"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#006699"></HeaderStyle>
<FooterStyle ForeColor="#000066" BackColor="White"></FooterStyle>
<Columns>
<asp:BoundColumn DataField="dato" HeaderText="Dato" DataFormatString="{0:dd/MM/yyyy}"></asp:BoundColumn>
<asp:BoundColumn DataField="brugerid" HeaderText="Navn"></asp:BoundColumn>
<asp:BoundColumn DataField="tid" HeaderText="Fra tidspunkt"></asp:BoundColumn>
<asp:ButtonColumn  ButtonType="PushButton" Text="Åben dag" CommandName="delete"></asp:ButtonColumn>
</Columns>

<PagerStyle HorizontalAlign="Left" ForeColor="#000066" BackColor="White" Mode="NumericPages"></PagerStyle>
</asp:datagrid>
<asp:label id="Label1" style="Z-INDEX: 102; LEFT: 50px; POSITION: absolute; TOP: 328px" runat="server" Visible="False" ForeColor="#C04000" Font-Size="Smaller" Font-Names="Verdana">Der er ingen lukkede dage</asp:label>
Avatar billede snepnet Nybegynder
27. august 2005 - 12:39 #6
den skulle være god nok - hvis du debugger, kommer du så ikke ind i handleren :
private void Gridclosed_DeleteCommand(object source, DataGridCommandEventArgs e)
{
    if (e.CommandName == "delete")
}

du behøver ikke spørge på commandname derinde - du rammer delecommand-handleren, hvis dit commandname er delete.

mvh
Avatar billede brian-johansen Nybegynder
27. august 2005 - 13:25 #7
når jeg skriver det der
Possible mistaken null statement.

Der skal vel være et eller andet, efter min if sætning?

mvh
Avatar billede snepnet Nybegynder
27. august 2005 - 13:52 #8
jeg det var det jeg mente med det jeg skrev 27/08-2005 10:47:40 .... du skriver at du vil have et eller andet gjort i en database, så den kode skal du skrive.
mvh
Avatar billede brian-johansen Nybegynder
27. august 2005 - 14:01 #9
når ok jeg prøver lige :)
Avatar billede snepnet Nybegynder
27. august 2005 - 14:07 #10
ja der er ingen gaver der :o)

hvis du har mulighed for at bruge version 2.0 - er der langt mere at hente mht. til normale "grid-scenarier".

mvh
Avatar billede brian-johansen Nybegynder
27. august 2005 - 14:14 #11
Jeg har skrevet flg.
string empToDelete = ( ( LinkButton  ) e.Item.FindControl ( "delete" ) ).Text;
DataTable myTable = ( DataTable ) Session [ "event" ];
DataRowCollection myRows = myTable.Rows;
DataRow thisRow = myRows.Find ( empToDelete );
if ( thisRow != null ) myRows.Remove ( thisRow );
}

Men der sker stadig ingen ting når jeg trykker på min knap :(
Avatar billede brian-johansen Nybegynder
27. august 2005 - 14:16 #12
ja, men du kan da ikke køre 2.0 på en alm server eller hvad?
Avatar billede snepnet Nybegynder
27. august 2005 - 14:35 #13
der skal heller ikke ske noget når du trykker på knappen med det kode du har skrevet.

2.0 kan køres på en server hvor version 2.0 af frameworket er installeret - jeg skal ikke spille klog på hvor du finder sådan en, men det er self. vanskeligere når det er et betaprodukt.
det skulle dog ligge i release omkring 7. november.

mht. koden.
debug igennem det og se hvad der sker, og husk at du skal sørge for at databinde igen, hvis du ændrer i datagrundlage, hvis du ønsker at se ændringerne i griddet.

mvh
Avatar billede brian-johansen Nybegynder
27. august 2005 - 14:37 #14
ok tak jeg prøver lige :D
Avatar billede snepnet Nybegynder
07. september 2005 - 16:43 #15
hvordan står det til her?
mvh
Avatar billede brian-johansen Nybegynder
12. september 2005 - 09:34 #16
Hej,

Jeg kan bare ikke finde ud af det.... Jeg kigget i forskellige guides, men jeg kan ikke få noget som helst af det til at virke :(

jeg har prøvet at lave flg.
private void Gridclosed_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string s = e.Item.Cells[0].Text;
OleDbCommand myCommand = new OleDbCommand("DELETE FROM event WHERE id="+s,myConn);
myCommand.CommandType = CommandType.Text;
myConn.Open();
myCommand.ExecuteNonQuery();
myConn.Close();
Gridclosed.DataBind();

   
}

Kan du se hvad jeg gør galt ?

mvh Brian
Avatar billede snepnet Nybegynder
12. september 2005 - 16:01 #17
svært at sige ... kan ikke umiddelbart være sikker på at du overhovedet gør noget.

kan du ikke vise mig hvordan der hvor du fortæller at metoden skal køres?
(du bør enten have noget i aspx-filen, eller også noget i initialiseringen).

desuden .... så skal du nok lægge den kode du bruger til at databinde griddet med i en metode for sig, så du kan kalde den - istedet for blot Gridclosed.DataBind();

rammer du metoden hvis du debugger?

mvh
Avatar billede brian-johansen Nybegynder
14. september 2005 - 09:39 #18
Jeg poster lige det hele: Jeg rammer ikke noget i min debugger
Min cs-fil.
namespace webkalender
{
    /// <summary>
    /// Summary description for closed.
    /// </summary>
    public class closed : System.Web.UI.Page
    {
           
       
        protected System.Web.UI.WebControls.DataGrid Gridclosed;
        OleDbConnection myConn;
        protected System.Web.UI.WebControls.Label Label1;
        OleDbDataAdapter myCmd;
        private void Page_Load(object sender, System.EventArgs e)
        {
       
string strDSN=@"Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=";
strDSN+=Server.MapPath("data\\kalender.mdb");
myConn = new OleDbConnection(strDSN);
string close = "Select id,dato, tid, brugerid From event Where emne='Dagen er lukket'";
myCmd = new OleDbDataAdapter(close, myConn);
myConn.Open();
DataSet ds = new DataSet();
myCmd.Fill(ds,"event");
       
if(ds.Tables[0].Rows.Count==0)
{
    Gridclosed.Visible=false;   
    Label1.Visible=true;
}
else
{   
Label1.Visible=false;
Gridclosed.DataSource= ds;
Gridclosed.DataBind();
Gridclosed.Visible=true;
}
if (!IsPostBack)
{
this.Gridclosed.DataSource = ds;
this.Gridclosed.DataBind();
}
}


        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {   
this.Gridclosed.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.Gridclosed_DeleteCommand);
this.Gridclosed.SelectedIndexChanged += new System.EventHandler(this.Gridclosed_SelectedIndexChanged);
this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion


private void Gridclosed_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string s = e.Item.Cells[0].Text;
OleDbCommand myCommand = new OleDbCommand("DELETE FROM event WHERE id="+s,myConn);
myCommand.CommandType = CommandType.Text;
myConn.Open();
myCommand.ExecuteNonQuery();
myConn.Close();

Gridclosed.DataBind();
           
}
}
}


Min aspx

<%@ Page language="c#" Codebehind="closed.aspx.cs" AutoEventWireup="false" Inherits="webkalender.closed" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>closed</title>
        <meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
        <meta content="C#" name="CODE_LANGUAGE">
        <meta content="JavaScript" name="vs_defaultClientScript">
        <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        </SCRIPT>
    <form id="closed" method="post" runat="server">
    <asp:datagrid id="Gridclosed" style="Z-INDEX: 101; LEFT: 28px; POSITION: absolute; TOP: 13px" runat="server" AllowPaging="True" AutoGenerateColumns="False" CellPadding="3" BackColor="White" BorderWidth="1px" BorderStyle="None" BorderColor="#CCCCCC">
    <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#669999"></SelectedItemStyle>
    <ItemStyle ForeColor="#000066"></ItemStyle>
    <HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#006699"></HeaderStyle>
    <FooterStyle ForeColor="#000066" BackColor="White"></FooterStyle>
    <Columns>
<asp:BoundColumn DataField="id" HeaderText="Id"></asp:BoundColumn>
<asp:BoundColumn DataField="dato" HeaderText="Dato" DataFormatString="{0:dd/MM/yyyy}"></asp:BoundColumn>
<asp:BoundColumn DataField="brugerid" HeaderText="Navn"></asp:BoundColumn>
<asp:BoundColumn DataField="tid" HeaderText="Fra tidspunkt"></asp:BoundColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Button id="Button1" runat="server" CausesValidation="false" CommandName="Delete" Text="Åben dag"></asp:Button>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Left" ForeColor="#000066" BackColor="White" Mode="NumericPages"></PagerStyle>
</asp:datagrid><asp:label id="Label1" style="Z-INDEX: 102; LEFT: 50px; POSITION: absolute; TOP: 328px" runat="server" Visible="False" ForeColor="#C04000" Font-Size="Smaller" Font-Names="Verdana">Der er ingen lukkede dage</asp:label>
</form>
</body>
</HTML>





Men det må da være lavet et eller andet så det er nemt at slette... Det er jo nemt nok at indsætte data.

mvh
Avatar billede brian-johansen Nybegynder
17. september 2005 - 17:25 #19
Har fundet ud af det, fandt en guide her:
http://authors.aspalliance.com/aspxtreme/adonet/updatingdataindb.aspx

snepnet smider du lige et svar ?

Tak for hjæplen

mvh
Avatar billede snepnet Nybegynder
19. september 2005 - 15:24 #20
u got i :o)
mvh
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