Avatar billede agertoft Nybegynder
11. april 2005 - 21:42 Der er 2 kommentarer og
1 løsning

Vælg hel række i datagrid

Jeg har et DataGrid, hvori jeg gerne vil have muligheden for at kunne vælge en HEL række. Jeg leder altså ikke efter en løsning med en ButtonColumn, da det er hele rækken jeg vil kunne vælge og ikke bare ud fra en enkelt kolonne i DataGrid'et.

Jeg forestiller mig en løsning, hvor rækken i DataGrid'et bliver highlightet, når man fører musen over, og man kan klikke hvor som helst på rækken for at fange SelectedItemChanged eventet.

Hvordan gøres dette?
Avatar billede snepnet Nybegynder
12. april 2005 - 00:57 #1
hej agertoft :o)

hvis du laver noget i denne stil i aspx-filen :

<HTML>
    <HEAD>
        <title>DataGridPage</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <style type="text/css">
            .itemNeutral { BACKGROUND-COLOR: #ffffff }
            .itemIn { BACKGROUND-COLOR: #c0c0c0 }
            .itemOut { BACKGROUND-COLOR: #cccccc }
        </style>
        <script language="javascript">
            function changeBackground(row)
            {
                row.className == "itemIn" ? row.className="itemOut" : row.className="itemIn";
            }
        </script>
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <asp:DataGrid id="DataGrid1" runat="server">
                <Columns>
                    <asp:ButtonColumn Text="Select" CommandName="Select" Visible="False"></asp:ButtonColumn>
                </Columns>
            </asp:DataGrid><BR>
        </form>
    </body>
</HTML>


og noget i denne stil i din code-behind :

    protected System.Web.UI.WebControls.DataGrid DataGrid1;

    private void Page_Load(object sender, System.EventArgs e)
    {
        if(!IsPostBack)
        {
            DataSet ds = new ExpDataAccess().GetSampleData(10);
            this.DataGrid1.DataSource = ds;
            this.DataGrid1.DataBind();
        }
    }

    override protected void OnInit(EventArgs e)
    {
        InitializeComponent();
        base.OnInit(e);
    }
   
    private void InitializeComponent()
    {   
        this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
        this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
        this.Load += new System.EventHandler(this.Page_Load);

    }

    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
        if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            e.Item.CssClass = "itemNeutral";
            e.Item.Attributes["onmouseover"] = "changeBackground(this);";
            e.Item.Attributes["onmouseout"] = "changeBackground(this);";   
            LinkButton lbtn = (LinkButton)e.Item.Cells[0].Controls[0];
            e.Item.Attributes["onclick"] = GetPostBackEventReference(lbtn, e.Item.ItemIndex.ToString());
        }       
    }

    private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
        Response.Write("Og der er klikke på række nummer " + e.Item.ItemIndex.ToString());
    }
}

skulle du i hvert fald have et noget at komme videre på.

(det er baseret på vs-template, men jeg har fjernet page-directive og det usings, namespace og klassenavn - men du kan paste det ind i noget du har i forvejen).

håber det var noget i den stil du var ude efter - ellers må du råbe op.

mvh
Avatar billede agertoft Nybegynder
12. april 2005 - 09:59 #2
Lige hvad jeg havde brug for... læg et svar :)
Avatar billede snepnet Nybegynder
12. april 2005 - 10:26 #3
får du her :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