Avatar billede agertoft Nybegynder
16. februar 2006 - 14:25 Der er 3 kommentarer og
1 løsning

Vælg hel række i datagrid (Server Control eller Web Part)

Jeg har et datagrid, hvor jeg har brug for at vælge en hel række i det og altså ikke have en ButtonColumn at trykke på. Jeg har tidligere løst dette på denne måde:

http://www.eksperten.dk/spm/608737

Men nu sidder jeg og udvikler en web part, og der kan jeg ikke få det til at virke. Rækken laver fint postback, når jeg klikker på den, men den fyrer ikke min itemcommand af, som den gør hvis jeg bruger en ButtonColumn der er synlig.

Er der nogle der har svaret på, hvordan det kan være? Eller evt selv har lavet en løsning i en server kontrol eller en web part, jeg kan bruge?

Jeg udvikler web parten til Sharepoint Portal Server og ikke ASP.NET 2.0.
Avatar billede snepnet Nybegynder
18. februar 2006 - 01:01 #1
lyder sært ... bare lige for at slå det fast - løsningen du har virker fint hvis knappen er synlig?
og hvis den sættes Visible=false - så virker det ikke?
hvis det er rigtigt opfattet - synes jeg du skal prøve at sætte den til at være usynlig på klienten (.Visible=false medfører at den overhovedet ikke renderes til klienten).. du kan bare gøre det med noget styleri (visibility:hidden;).
mvh
Avatar billede agertoft Nybegynder
20. februar 2006 - 10:29 #2
Nej det virker ikke, når knappen er synlig. Men når knappen er synlig, kan man jo klikke på den og så laver den fint itemcommand. Men det virker ikke med hele linjen.

Min ItemDataBound ser sådan ud:

private void _Result_DataGrid_ItemDataBound(object sender, DataGridItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.SelectedItem)
    {
        e.Item.Style["CURSOR"] = "hand";
        LinkButton lb = (LinkButton)e.Item.Cells[0].Controls[0];
        lb.ID = "idid";
        e.Item.ID = "rowID";
   
        e.Item.Attributes["onclick"] = Page.GetPostBackEventReference(lb, e.Item.ItemIndex.ToString());
        Page.Response.Write(lb.CommandName.ToString());
    }
}

og det HTML, der bliver smidt ud ser sådan ud:

<table cellspacing="0" cellpadding="0" SortDirection="asc" border="0" id="Left_g_721e6879_1ce0_4208_90e0_ab38224158f0_DataGrid_Result" style="border-width:0px;height:100%;width:100%;border-collapse:collapse;">
   
<tr id="Left_g_721e6879_1ce0_4208_90e0_ab38224158f0_DataGrid_Result_rowID" onclick="__doPostBack('idid','0')" style="background-color:#FCFCFE;height:21px;CURSOR:hand;">

<td style="width:50px;"><a id="Left_g_721e6879_1ce0_4208_90e0_ab38224158f0_DataGrid_Result_rowID_idid" href="java script:__doPostBack('Left$g_721e6879_1ce0_4208_90e0_ab38224158f0$DataGrid_Result$rowID$idid','')" style="visibility:hidden;">Select</a></td>
<td style="width:200px;">Testperson</td><td style="width:200px;">Linie_BX</td>
<td style="width:200px;">TestAdresse1 A 1</td>
</tr>

<tr style="background-color:#FCFCFE;height:100%;">
<td style="width:50px;"></td><td style="width:200px;"></td>
<td style="width:200px;"></td><td style="width:200px;"></td>
</tr>
</table>

Som du kan se, får række en onclick der ser sådan ud: onclick="__doPostBack('idid','0')" og selve min ButtonColumn indeholder sådan et link: <a id="Left_g_721e6879_1ce0_4208_90e0_ab38224158f0_DataGrid_Result_rowID_idid" href="java script:__doPostBack('Left$g_721e6879_1ce0_4208_90e0_ab38224158f0$DataGrid_Result$rowID$idid','')" style="visibility:hidden;">Select</a>

Det ser for mig ud som om, at denne her række ikke får fat i det klient-genererede ID på min ButtonColumn, men kun serverside id'et. Og det kan den ikke bruge... ved nogen hvordan jeg løser dette?
Avatar billede agertoft Nybegynder
21. februar 2006 - 16:27 #3
Jeg har løst problemet. Lavede min egen button til datagrid'et:

public class SelectButtonTemplate : ITemplate
    {
        private Button _Select_Button;
        private string _ButtonText;
        private bool _IsVisible;

        public string ButtonText
        {
            get { return _ButtonText; }
            set { _ButtonText = value; }
        }

        public bool IsVisible
        {
            get { return _IsVisible; }
            set { _IsVisible = value; }
        }

        public SelectButtonTemplate(string buttonText, bool visible)
        {
            _ButtonText = buttonText;
            _IsVisible = visible;
        }

        #region ITemplate Members

        public void InstantiateIn(Control container)
        {
            _Select_Button = new Button();
            _Select_Button.ID = "_Select_Button";
            _Select_Button.CommandName = "Select";
            _Select_Button.Text = _ButtonText;
            _Select_Button.Visible = _IsVisible;
            container.Controls.Add(_Select_Button);
        }


        #endregion

    }

Havde gjort det samme med en linkbutton til at starte med, men det virkede underligt nok ikke... Men det gør det nu :)
Avatar billede snepnet Nybegynder
25. februar 2006 - 11:29 #4
beklager ... jeg har ikke haft mulighed for at komme herud - sorry.
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