valsil Skrevet 29. september 2004 Del Skrevet 29. september 2004 Hei Er det noen som vet hovordan en kan sette en datagrid til å være editerbar i en webapplikasjon? Silje Lenke til kommentar
Stream Skrevet 29. september 2004 Del Skrevet 29. september 2004 Det står en del om det her: http://msdn.microsoft.com/library/default....rverControl.asp Lenke til kommentar
valsil Skrevet 29. september 2004 Forfatter Del Skrevet 29. september 2004 Det står en del om det her: http://msdn.microsoft.com/library/default....rverControl.asp Hei igjen. Den linken din gjorde ikke at jeg forstod alt likevel. Jeg har fått til å laste data inn i gridden og jeg har funnet ut hvordan jeg editerer. Problemet er bare gridden kun består av read only felter. Jeg lurer på hvordan jeg gjør feltene om til editerbare felter. Kan det gjøres i HTML vinduet? Silje Lenke til kommentar
Kirikiri Skrevet 30. september 2004 Del Skrevet 30. september 2004 For å få til editerbare felter, må du gjøre følgende: <Columns> <asp:TemplateColumn HeaderText="Tekst"> <ItemTemplate> <%# DataBinder.Eval(Container, "DataItem.MyTextValue")%> </ItemTemplate> <EditItemTemplate> <asp:Textbox runat="server" name ="Textbox2" ID="Textbox2" Text='<%# DataBinder.Eval(Container, "DataItem.MyTextValue")%>' /> </EditItemTemplate> </asp:TemplateColumn> </Columns> Dvs en asp:Templatecolumn har 2 typer: Itemtemplate og EditItemTemplate. Itemtemplate er det som vises til vanlig, EditItemTemplate er det som vises når du er i redigeringsmodus. Får du til å bytte mellom vanlig og redigeringsmodus vha de innebygde knappene? SØrg for å sette textbox til readonly=false, hvis du har satt til true. Kan komme med bedre forklaring og litt bedre eksempel senere i kveld. Kirikiri Lenke til kommentar
valsil Skrevet 30. september 2004 Forfatter Del Skrevet 30. september 2004 For å få til editerbare felter, må du gjøre følgende: <Columns> <asp:TemplateColumn HeaderText="Tekst"> <ItemTemplate> <%# DataBinder.Eval(Container, "DataItem.MyTextValue")%> </ItemTemplate> <EditItemTemplate> <asp:Textbox runat="server" name ="Textbox2" ID="Textbox2" Text='<%# DataBinder.Eval(Container, "DataItem.MyTextValue")%>' /> </EditItemTemplate> </asp:TemplateColumn> </Columns> Dvs en asp:Templatecolumn har 2 typer: Itemtemplate og EditItemTemplate. Itemtemplate er det som vises til vanlig, EditItemTemplate er det som vises når du er i redigeringsmodus. Får du til å bytte mellom vanlig og redigeringsmodus vha de innebygde knappene? SØrg for å sette textbox til readonly=false, hvis du har satt til true. Kan komme med bedre forklaring og litt bedre eksempel senere i kveld. Kirikiri Takk takk. Fint om du hadde hatt tid til å hjelpe meg litt. Jeg holder på å bli gal... HTML kode <HTML> <HEAD> <title>WebChannelConfig2</title> <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"> <meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE"> <meta content="JavaScript" name="vs_defaultClientScript"> <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"> </HEAD> <body bgColor="#d3d3d3" MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:datagrid id="dgChannel" style="Z-INDEX: 101; LEFT: 24px; POSITION: absolute; TOP: 112px" Visible="True" runat="server" OnEditCommand="dgrChannel_EditCommand" ShowFooter="True" Width="904px" <SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle> <SelectedItemStyle Font-Bold="True"></SelectedItemStyle> <Columns> <asp:EditCommandColumn ButtonType="PushButton" UpdateText="Update" CancelText="Cancel" EditText="Edit"> <ItemStyle Font-Overline="True"></ItemStyle> </asp:EditCommandColumn> <asp:TemplateColumn HeaderText="ID"> <ItemTemplate> <asp:TextBox id="txtID" runat="server"></asp:TextBox> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="SLUG"> <ItemTemplate> <asp:TextBox id="txtslug" runat="server" ReadOnly="False"></asp:TextBox> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:datagrid></form> </FORM> </body> </HTML> Kode Imports System.xml Public Class WebForm5 Inherits System.Web.UI.Page #Region " Web Form Designer Generated Code " 'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() End Sub Protected WithEvents dgChannel As System.Web.UI.WebControls.DataGrid 'NOTE: The following placeholder declaration is required by the Web Form Designer. 'Do not delete or move it. Private designerPlaceholderDeclaration As System.Object Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub #End Region Public Sub dgrChannel_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles dgChannel.EditCommand Response.Write("en hendelse inntraff") HER VIL JEG TA FATT I RADEN SOM BLE ENDRET OG LAGRE DEN I XML-DOKUMENTET dgChannel.EditItemIndex = e.Item.ItemIndex ' dgrChannel.EditItemIndex = -1 Dim IDchannel IDchannel = e.Item.Cells(0).Text() Response.Write(IDchannel) End Sub 'HER VIL JEG PÅ BAKGRUNN AV MITT XML DOKUMENT LASTE GRIDDEN MED 'INH. FRA XML-DOKUMENTET. FELTENE SKULLE EGENTLIG VÆRE TEKSTBOKSER... Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not IsPostBack Then 'a = 0 Dim xDocConstants As New XmlDocument Dim pathToConstants As String = Session("path") '("http://std4-1/ManusMaker/ManusConstants/mmconstantsxml_2.xml") ' xDocConstants.Load(pathToConstants) xDocConstants.Load("http://std4-1/ManusMaker/ManusConstants/mmconstantsxml_2.xml") If Not xDocConstants Is Nothing Then Dim xnolChannels As XmlNodeList = xDocConstants.SelectNodes("//channel") If Not xnolChannels Is Nothing Then Dim Table1 As DataTable 'creating a table named Channel Table1 = New DataTable("Channel") 'Fylle dropdown liste med kanaler fra xml dokumentet Dim slug, idA, source, num, type, videochannel, autotrans, videocuedelay, mixdelay, a_1, a_2, a_3, a_4, alevel_1 As String Dim alevel_2, alevel_3, alevel_4, fadetime, routerchannel As String Dim IDColumn As DataColumn = New DataColumn("ID") 'declaring a column named Name IDColumn.DataType = System.Type.GetType("System.String") 'setting the datatype for the column Table1.Columns.Add(IDColumn) 'adding the column to table Dim slugColumn As DataColumn = New DataColumn("SLUG") slugColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(slugColumn) Dim sourceColumn As DataColumn = New DataColumn("SOURCE") sourceColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(sourceColumn) Dim numColumn As DataColumn = New DataColumn("NUM") numColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(numColumn) Dim typeColumn As DataColumn = New DataColumn("TYPE") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(typeColumn) Dim videoChannelColumn As DataColumn = New DataColumn("VIDEOCHANNEL") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(videoChannelColumn) Dim autotransColumn As DataColumn = New DataColumn("AUTOTRANS") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(autotransColumn) Dim videocuedelayColumn As DataColumn = New DataColumn("VIDEOCUEDELAY") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(videocuedelayColumn) Dim mixdelayColumn As DataColumn = New DataColumn("MIXDELAY") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(mixdelayColumn) Dim a_1Column As DataColumn = New DataColumn("A_1") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(a_1Column) Dim a_2Column As DataColumn = New DataColumn("A_2") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(a_2Column) Dim a_3Column As DataColumn = New DataColumn("A_3") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(a_3Column) Dim a_4Column As DataColumn = New DataColumn("A_4") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(a_4Column) Dim alevel_1Column As DataColumn = New DataColumn("ALEVEL_1") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(alevel_1Column) Dim alevel_2Column As DataColumn = New DataColumn("ALEVEL_2") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(alevel_2Column) Dim alevel_3Column As DataColumn = New DataColumn("ALEVEL_3") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(alevel_3Column) Dim alevel_4Column As DataColumn = New DataColumn("ALEVEL_4") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(alevel_4Column) Dim fadetimeColumn As DataColumn = New DataColumn("FADETIME") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(fadetimeColumn) Dim routerchannelColumn As DataColumn = New DataColumn("ROUTERCHANNEL") typeColumn.DataType = System.Type.GetType("System.String") Table1.Columns.Add(routerchannelColumn) 'dgrChannel.CellPadding = 2 'dgrChannel.CellSpacing = 0 'dgrChannel.Width = 550 'dgrChannel.BorderWidth = 1 dgChannel.BorderColor = ColorTranslator.FromHtml("Black") 'dgrChannel.AutoGenerateColumns = False dgChannel.ForeColor = ColorTranslator.FromHtml("Black") 'dgrChannel.Font.Size = 8 dgChannel.Font.Name = "Arial" dgChannel.AllowSorting = True 'this sets the event handler for sort command 'dgrChannel.SortCommand += new DataGridSortCommandEventHandler(Sort_Grid); 'sets the headerstyle dgChannel.HeaderStyle.BackColor = ColorTranslator.FromHtml("Gray") dgChannel.HeaderStyle.ForeColor = ColorTranslator.FromHtml("Black") dgChannel.HeaderStyle.Font.Name = "Arial" 'dgrChannel.HeaderStyle.Font.Size = 9 dgChannel.HeaderStyle.Font.Bold = True 'dgrChannel.HeaderStyle.HorizontalAlign = HorizontalAlign.Left dgChannel.Enabled = True 'kjører to ganger diden jeg ikke har funnet ut hvordan en dynamisk oppretter variabler. For i As Integer = 0 To xnolChannels.Count - 1 'tmp2 = tmp2 & " " & xnolChannels(i).SelectSingleNode("@slug").Value slug = (xnolChannels(i).SelectSingleNode("@slug").Value) idA = (xnolChannels(i).SelectSingleNode("@ID").Value) source = (xnolChannels(i).SelectSingleNode("@source").Value) num = (xnolChannels(i).SelectSingleNode("@num").Value) type = (xnolChannels(i).SelectSingleNode("@type").Value) videochannel = (xnolChannels(i).SelectSingleNode("@videochannel").Value) autotrans = (xnolChannels(i).SelectSingleNode("@autotrans").Value) videocuedelay = (xnolChannels(i).SelectSingleNode("@videocuedelay").Value) mixdelay = (xnolChannels(i).SelectSingleNode("@mixdelay").Value) a_1 = (xnolChannels(i).SelectSingleNode("@a_1").Value) a_2 = (xnolChannels(i).SelectSingleNode("@a_2").Value) a_3 = (xnolChannels(i).SelectSingleNode("@a_3").Value) a_4 = (xnolChannels(i).SelectSingleNode("@a_3").Value) alevel_1 = (xnolChannels(i).SelectSingleNode("@alevel_1").Value) alevel_2 = (xnolChannels(i).SelectSingleNode("@alevel_2").Value) alevel_3 = (xnolChannels(i).SelectSingleNode("@alevel_3").Value) alevel_4 = (xnolChannels(i).SelectSingleNode("@alevel_4").Value) fadetime = (xnolChannels(i).SelectSingleNode("@fadetime").Value) routerchannel = (xnolChannels(i).SelectSingleNode("@routerchannel").Value) Dim row As DataRow Try 'declaring a new row row = Table1.NewRow() 'filling the row with values. Item property is used to set the field value. 'Dim TB As New TextBox 'If Not IsPostBack Then 'myTB.Text = "test" 'dgTable(dgrChannel).Rows(e.Item.DataSetIndex)(1) 'End If row.Item("id") = idA row.Item("slug") = slug row.Item("source") = source row.Item("type") = type row.Item("num") = num row.Item("videochannel") = videochannel row.Item("autotrans") = autotrans row.Item("videocuedelay") = videocuedelay row.Item("mixdelay") = mixdelay row.Item("a_1") = a_1 row.Item("a_2") = a_2 row.Item("a_3") = a_3 row.Item("a_4") = a_4 row.Item("alevel_1") = alevel_1 row.Item("alevel_2") = alevel_2 row.Item("alevel_3") = alevel_3 row.Item("alevel_4") = alevel_4 row.Item("fadetime") = fadetime row.Item("routerchannel") = routerchannel 'adding the completed row to the table Table1.Rows.Add(row) Catch End Try Next Dim ds As New DataSet ds = New DataSet 'creating a dataset ds.Tables.Add(Table1) 'adding the table to dataset dgChannel.DataSource = ds 'binding the table to datagrid dgChannel.DataBind() dgChannel.EnableViewState = True dgChannel.Enabled = True End If End If End If End Sub End Class Lenke til kommentar
Kirikiri Skrevet 1. oktober 2004 Del Skrevet 1. oktober 2004 (endret) Du mangler EditItemTemplate, slik jeg sa. Se kort kodeeksempel. <Columns> <asp:EditCommandColumn ButtonType="PushButton" UpdateText="Update" CancelText="Cancel" EditText="Edit"> <ItemStyle Font-Overline="True"></ItemStyle> </asp:EditCommandColumn> <asp:TemplateColumn HeaderText="ID"> [B] <ItemTemplate> <%# Container.DataItem("idA")%> </ItemTemplate> <EditItemTemplate> <asp:textbox id="txtID" runat="Server" ReadOnly="False" Text='<%# Container.Dataitem("idA")%>' /> </EditItemTemplate> [/B] </asp:TemplateColumn> <asp:TemplateColumn HeaderText="SLUG"> <ItemTemplate> <%# COntainer.Dataitem("slug") %> </ItemTemplate> <EditItemTemplate> <asp:TextBox id="txtslug" runat="server" ReadOnly="False" text='<%# Container.DataItem("slug")%>' ></asp:TextBox> </EditItemTemplate> </asp:TemplateColumn> </Columns> Itemtemplate er det som vises når man ikke redigerer, EditItemtemplate er det som vises når man skal redigere. Du trenger ingen tekstboks når du bare skal vise fram datagriden, men du trenger det når du skal redigere. Så du må lage kode for begge disse visningene. Og så vil jeg anbefale deg å prefixe variabelnavnene dine, så er de letter å holde orden på. Kall de for intID, strSlug, strFieldName, intNumber etc. Lettere for andre å skjønne hvor du vil, og hva slags type en variabel egentlig er. Og jeg tror det finnes enklere måter å hente ut data fra XML enn det du gjør. SJekk C#-forumet, noen har nettopp spurt om hvordan man henter ut. Edit: Det var jo deg... Fant ikke det store eksempelet i går, mulig jeg rekker i kveld eller morgen. Kirikiri Endret 1. oktober 2004 av Kirikiri Lenke til kommentar
valsil Skrevet 1. oktober 2004 Forfatter Del Skrevet 1. oktober 2004 Du mangler EditItemTemplate, slik jeg sa. Se kort kodeeksempel. <Columns> <asp:EditCommandColumn ButtonType="PushButton" UpdateText="Update" CancelText="Cancel" EditText="Edit"> <ItemStyle Font-Overline="True"></ItemStyle> </asp:EditCommandColumn> <asp:TemplateColumn HeaderText="ID"> [B] <ItemTemplate> <%# Container.DataItem("idA")%> </ItemTemplate> <EditItemTemplate> <asp:textbox id="txtID" runat="Server" ReadOnly="False" Text='<%# Container.Dataitem("idA")%>' /> </EditItemTemplate> [/B] </asp:TemplateColumn> <asp:TemplateColumn HeaderText="SLUG"> <ItemTemplate> <%# COntainer.Dataitem("slug") %> </ItemTemplate> <EditItemTemplate> <asp:TextBox id="txtslug" runat="server" ReadOnly="False" text='<%# Container.DataItem("slug")%>' ></asp:TextBox> </EditItemTemplate> </asp:TemplateColumn> </Columns> Itemtemplate er det som vises når man ikke redigerer, EditItemtemplate er det som vises når man skal redigere. Du trenger ingen tekstboks når du bare skal vise fram datagriden, men du trenger det når du skal redigere. Så du må lage kode for begge disse visningene. Og så vil jeg anbefale deg å prefixe variabelnavnene dine, så er de letter å holde orden på. Kall de for intID, strSlug, strFieldName, intNumber etc. Lettere for andre å skjønne hvor du vil, og hva slags type en variabel egentlig er. Og jeg tror det finnes enklere måter å hente ut data fra XML enn det du gjør. SJekk C#-forumet, noen har nettopp spurt om hvordan man henter ut. Edit: Det var jo deg... Fant ikke det store eksempelet i går, mulig jeg rekker i kveld eller morgen. Kirikiri Takk så mye for god hjelp Nå har jeg endelig fått det til. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå