Avatar billede ihtezaz Praktikant
10. november 2004 - 12:32 Der er 11 kommentarer

oprette dropdownliste i en datagrid, når man skal redigere noget

Hej

Hvordan opretter jeg en dropdownliste i min datagrid, når man skal redigere et en cell. En af cellerne må kun hav forudbestemte værdier, og derfor skal jeg brug en dropdownliste når man ønsker at rediere i cellen.

Jeg går ud fra at man skal bikse det i datagridens ItemDataBound event.

På forhånd tak.
Avatar billede mccannon Nybegynder
10. november 2004 - 14:24 #1
Hmm man kunne og så lave en template column
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace somenamespace
{
    /// <summary>
    /// Summary description for DropDownTemplate.
    /// </summary>
    public class DropDownTemplate :ITemplate
    {
        private bool _isenabled;
        private string _cssclass;
        private DataTable _dt;
        private string _nulltxt;
        public DropDownTemplate(bool enabled, string css, DataTable data, string nulltext)
        {
           
            _isenabled = enabled;
            _cssclass = css;
            _dt = data;
            _nulltxt = nulltext;
        }

        //must implement following method
        public void InstantiateIn(Control container)
        {
            ListBox dl = new ListBox();
            dl.DataBinding += new EventHandler(this.OnDataBinding);
            container.Controls.Add(dl);
               
        }
       
   
        public void OnDataBinding(object sender, EventArgs e)
        {   
            ListBox d = (ListBox)sender;
            d.DataSource = _dt;
            d.DataValueField = _dt.Columns[0].ColumnName;
            d.DataTextField = _dt.Columns[1].ColumnName;
            d.CssClass = _cssclass;
            d.SelectionMode = ListSelectionMode.Single;
            d.Rows = 1;
           
        }
    }
}

og så tilføje den på den hermåde
TemplateColumn tc = new TemplateColumn();
//parameter enabled, cssklasses, datasource[datatable] og en nulltxt
tc.EditItemTemplate = new DropDownTemplate(true,"Large", AdminBAL.GetCssClasses(),"");

hvis det er lavet i codebehind :o)
Avatar billede snepnet Nybegynder
14. november 2004 - 10:43 #2
du kan også bare skrive det i aspx-koden, i din EditItemTemplate på denne form :

<EditItemTemplate>
  <asp:DropDownList runat="server" id="ddSomething"
        DataValueField="SomeId"  DataTextField="Something"
        DataSource='<%# GetSomething() %>'
        SelectedIndex='<%# GetSelectedIndex(Container.DataItem("SomeId")) %>' />
</EditItemTemplate>

GetSomething() kan så returnere en datatable eller et datasæt - eller noget andet dropdownlist kan databinde til.

Du kan se et godt eksempel på brug af datagrids (inklusiv ovenstående) her :
http://aspnet.4guysfromrolla.com/demos/oneDDLInFooter.aspx

mvh
Avatar billede ihtezaz Praktikant
15. november 2004 - 13:49 #3
Oki doki, tak begge to. Jeg vender tilbage snart, sorry det har taget lang tid, har været udenby's.
Avatar billede ihtezaz Praktikant
15. november 2004 - 14:09 #4
Snepnet, kunne jeg ikke også brug en array som datasource til min dropdownliste, for jeg skal bare have statiske værdier i den.
Avatar billede ihtezaz Praktikant
15. november 2004 - 14:19 #5
Hvor i aspx koden skal, <EditItemTemplate> indsættes, når jeg sætter den inde i min datagrid, giver det fejl.
Avatar billede mccannon Nybegynder
15. november 2004 - 14:40 #6
<asp:DataGrid id="DataGrid1" runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Label id="Label1" runat="server">Label</asp:Label>
</ItemTemplate>
<EditItemTemplate>

<asp:DropDownList runat="server" id="ddSomething"
        DataValueField="SomeId"  DataTextField="Something"
        DataSource='<%# GetSomething() %>'
        SelectedIndex='<%# GetSelectedIndex(Container.DataItem("SomeId")) %>' />

</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
Avatar billede snepnet Nybegynder
15. november 2004 - 18:39 #7
hej ihtezaz :o)
jo det kan du godt - sådan en som den her er helt fin :

string[] someValues = {"hej","med","dig"};
DropDownList list = new DropDownList();
list.DataSource = someValues;
list.DataBind();

mvh
Avatar billede ihtezaz Praktikant
16. november 2004 - 00:26 #8
finno..jeg prøver det nu..tak begge to, husker ved point uddeling
Avatar billede ihtezaz Praktikant
16. november 2004 - 19:11 #9
Når jeg tilføjer : SelectedIndex='<%# GetSelectedIndex(Container.DataItem("ddlID")) %>' /> 

får jeg følgende fejl : CS0118: 'System.Web.UI.WebControls.DataGridItem.DataItem' denotes a 'property' where a 'method' was expected.
Avatar billede ihtezaz Praktikant
16. november 2004 - 19:21 #10
Sorry, havde glemt GetSelectedIndex metoden.
Avatar billede ihtezaz Praktikant
16. november 2004 - 19:58 #11
Når jeg, henter værdier fra en array, hvad kan jeg så skriv i ddl.DataTextField og dll.DataValueField. For jeg skal hent de valgte item, og læg det i DB.
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

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