Gå til innhold

Hvordan endrer man felter i en datagrid?


Anbefalte innlegg

Videoannonse
Annonse

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

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
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... :blush:

 

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

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 av Kirikiri
Lenke til kommentar
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 :thumbup: Nå har jeg endelig fått det til. :D

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...