Avatar billede ihtezaz Praktikant
07. oktober 2004 - 23:24 Der er 14 kommentarer og
1 løsning

Hente 7 coloner fra en tabel i en DataSet, men kun vise de 6

Hej

Jeg henter 7 coloner inkl. Id colonne fra min MS Sql server, inde i en DataSet object og binder det til en datagrid. Id skal jeg brug til at finde rundt i datagridet, men jeg vil ikke vise ID colonnen i Datagrid'et, hvordan kan det lad sig gøre ?
Avatar billede arne_v Ekspert
07. oktober 2004 - 23:28 #1
Har du mulighed for at sætte felt bredden til 0 for den kolonne ?
Avatar billede arne_v Ekspert
07. oktober 2004 - 23:28 #2
(jeg ved ikke noget hvad man gør i DataGrid, men den teknik bruges i andre sprog)
Avatar billede ihtezaz Praktikant
07. oktober 2004 - 23:34 #3
Nope det virker ikke, for på denne måde kunne jeg også sige, Column[index].visible = false; Men før data'ene bliver loadet inden i datagridet, kan jeg ikke refere til dens colonner.
Avatar billede snepnet Nybegynder
08. oktober 2004 - 01:14 #4
du kan enten definere dine kolonner selv ved at sætte AutoGenerateColumns=false, og tilføje de BoundColumns/TemplateColumns du måtte have brug for.
(sig til hvis du vil have et eksempel)

hvis du ellers er tilfreds med det autogenererede grid, er det nemmeste nok hvis du abbonnere på f.eks. ItemDataBound-eventet og skriver lidt kode i denne stil her :

private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
  // angiv f.eks. kolonne nummer 2 som usynlig
  e.Item.Cells[1].Visible = false;
}

du abbonnerer på eventet på denne måde :
this.DataGrid1.ItemDataBound += new DataGridItemEventHandler(this.DataGrid1_ItemDataBound);

(hvis du bruger visual studio kan du bare klikke på lynet i propertysheetet, og efterfølgende dobbeltklikke der hvor der står ItemDataBound - så skriver miljøet den nødvendige kode for at du kan håndtere eventet).

håber det er tilstrækkeligt - ellers må du lige sige til.
mvh
Avatar billede ihtezaz Praktikant
08. oktober 2004 - 08:46 #5
Ja det virker, men det sletter kun selve cellerne, men ikke headeren(overskriften) på colonnen.
Avatar billede snepnet Nybegynder
08. oktober 2004 - 09:18 #6
Så prøv at gøre det i ItemCreated istedet for ItemDataBound...
Du kan teste på typen af item ved e.ItemType...
altså
if(e.Item.ItemType == ListItemType.Header) // er så headeren
Avatar billede ihtezaz Praktikant
08. oktober 2004 - 10:44 #7
Hurra..det virker helt fint. tak. smid svar.
Avatar billede snepnet Nybegynder
08. oktober 2004 - 10:52 #8
et svare her :o)
mvh
Avatar billede ihtezaz Praktikant
08. oktober 2004 - 14:55 #9
Snepnet: der er kommet et lille problem, jeg har på min datagrid også select command knapper, når jeg har valgt en select knap og så klikker på den næste select knap, forvandles teksten på den forrige colonne hvor jeg havde klikket på select, til det samme inden jeg brugte ItemCreated event. Ved ikke helt hvorfor den opføre sådan.
Avatar billede snepnet Nybegynder
08. oktober 2004 - 15:47 #10
det har sansynligvis noget at gøre med den måde du databinde og gemmer.... jeg er lige på vej ud af døren, men jeg sidder ved klaveret igen senere.
du må meget gerne poste lidt mere kode, så jeg kan se hvordan du gør det.
mvh
Avatar billede ihtezaz Praktikant
09. oktober 2004 - 00:08 #11
Hej igen

Fint, jeg paster hele klassen her:

public class LicensOversigt : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Label Label1;
        protected System.Web.UI.WebControls.DropDownList ddlUdgiver;
        protected System.Web.UI.WebControls.DropDownList ddlSoftware;
        protected System.Web.UI.WebControls.CheckBox cbLedigeLicenser;
        protected System.Web.UI.WebControls.DataGrid dgOversigt;
        protected System.Web.UI.WebControls.Button btnOk;
        protected System.Web.UI.WebControls.CheckBox cbUdloebeneLicenser;
        protected System.Web.UI.WebControls.TextBox txtNote;

        SqlConnection sqlCon = new SqlConnection( ConfigurationSettings.AppSettings["DbPath"]);

        SqlDataAdapter daSoftware = new SqlDataAdapter();
        SqlDataAdapter daUdgiver = new SqlDataAdapter();
        SqlDataAdapter da = new SqlDataAdapter();
        DataSet ds = new DataSet();



        private void Page_Load(object sender, System.EventArgs e)
        {
            if(!IsPostBack)
            {
                DgBind();
                UdgiverDdlBind();
            }
        }


        private void UdgiverDdlBind()
        {
           
            SqlCommand cmdUdgiver = sqlCon.CreateCommand();
            cmdUdgiver.CommandType = CommandType.Text;
            cmdUdgiver.CommandText = "SELECT UdgiverNavn,UdgiverID FROM Udgiver";
       
            daUdgiver.SelectCommand = cmdUdgiver;
            daUdgiver.Fill(ds,"Udgiver");
            ddlUdgiver.DataSource = ds.Tables["Udgiver"];
       
            ddlUdgiver.DataTextField = "UdgiverNavn";
            ddlUdgiver.DataValueField = "UdgiverID";
            ddlUdgiver.DataBind();
            ddlUdgiver.Items.Insert(0,"Vælg");
            ddlUdgiver.Items[0].Selected = true;

        }


        private void ddlSoftwareBind()
        {
       
            SqlCommand cmdSoftware = sqlCon.CreateCommand();
            cmdSoftware.CommandType = CommandType.StoredProcedure;
            cmdSoftware.CommandText = "dbo.StoredProcedure17";

           
            cmdSoftware.Parameters.Add(new SqlParameter("@UdgiverID",SqlDbType.Int));
            cmdSoftware.Parameters["@UdgiverID"].Value = ddlUdgiver.SelectedItem.Value;
       
            daSoftware.SelectCommand = cmdSoftware;
            daSoftware.Fill(ds,"Software");
            ddlSoftware.DataSource = ds.Tables["Software"];
       
            ddlSoftware.DataTextField = "SoftwareNavn";
           
   
            ddlSoftware.DataBind();
            ddlSoftware.Items.Insert(0,"Vælg");
            ddlSoftware.Items[0].Selected = true;
       
        }

        private void DgBind()
        {

            SqlCommand com = sqlCon.CreateCommand();
            com.CommandType = CommandType.StoredProcedure;
            com.CommandText = "StoredProcedure1";
//            SqlDataReader dr = com.ExecuteReader();
           
            da.SelectCommand = com;
            da.Fill(ds,"Oversigt");
       
            dgOversigt.DataSource = ds;

           
            dgOversigt.DataBind();


        }

       
        public static string omskiftBool(string tilstand)

        {
            string tils = "";
            if(tilstand.Equals("False"))
            {
                    tils = "optaget";
            }
                else
                {
                    tils = "ledig";
                }
            return tils;
        }


        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {   
            this.ddlUdgiver.SelectedIndexChanged += new System.EventHandler(this.ddlUdgiver_SelectedIndexChanged);
            this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
            this.dgOversigt.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgOversigt_ItemCreated);
            this.dgOversigt.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgOversigt_ItemCommand_1);
            this.dgOversigt.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgOversigt_ItemDataBound);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        private void dgOversigt_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        {
           
                if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                        //DgBind();
                    e.Item.Cells[1].Visible = false;
                    e.Item.Cells[9].Text = DateTime.Parse(e.Item.Cells[9].Text).ToShortDateString();
                    e.Item.Cells[10].Text = DateTime.Parse(e.Item.Cells[10].Text).ToShortDateString();
                    e.Item.Cells[7].Text = omskiftBool(e.Item.Cells[7].Text);
                   
                }
            }

        private void btnOk_Click(object sender, System.EventArgs e)
        {
           
            DgBind();
            DataView dv = new DataView(ds.Tables["Oversigt"]);
            if(ddlUdgiver.SelectedIndex != 0 || cbLedigeLicenser.Checked || cbUdloebeneLicenser.Checked)

            {
                if(ddlUdgiver.SelectedIndex == 0 && cbLedigeLicenser.Checked && !cbUdloebeneLicenser.Checked)
                {

                    dv.RowFilter ="Status ="+1;
                    dgOversigt.DataSource = dv;
                    dgOversigt.DataBind();
                }

                else if(ddlUdgiver.SelectedIndex == 0 && cbUdloebeneLicenser.Checked)
                {
                    dv.RowFilter = "UdloebsDato <'"+DateTime.Now.Date+"'";
                                       
                }
           
                else if(ddlUdgiver.SelectedIndex == 0 && cbUdloebeneLicenser.Checked && cbLedigeLicenser.Checked)
                {
                    dv.RowFilter = "UdloebsDato <'"+DateTime.Now.Date+"'"+"AND Status="+1;
           
                }


                else if(ddlUdgiver.SelectedIndex != 0 && ddlSoftware.SelectedIndex ==0 && cbLedigeLicenser.Checked)
                {
                    dv.RowFilter = "UdgiverNavn ='"+ddlUdgiver.SelectedItem.Text+"'"+"AND Status="+1;                           
                }

                else if(ddlUdgiver.SelectedIndex != 0 && ddlSoftware.SelectedIndex ==0 && cbUdloebeneLicenser.Checked)
                {
                    dv.RowFilter ="UdgiverNavn ='"+ddlUdgiver.SelectedItem.Text+"'"+"AND UdloebsDato <'"+DateTime.Now.Date+"'";
                }
                   

                else if(ddlUdgiver.SelectedIndex != 0 && ddlSoftware.SelectedIndex ==0)
                {
                    dv.RowFilter = "UdgiverNavn ='"+ddlUdgiver.SelectedItem.Text+"'";       
                }

                else if(ddlSoftware.SelectedIndex !=0 && !cbLedigeLicenser.Checked && !cbUdloebeneLicenser.Checked )
                {
                    dv.RowFilter = "UdgiverNavn ='"+ddlUdgiver.SelectedItem.Text+"'"+"AND SoftwareNavn ='"+ddlSoftware.SelectedItem.Text+"'";       
                    //                    dv.RowFilter = "SoftwareNavn ='"+ddlSoftware.SelectedItem.Text+"'";
                }

               

                else if(ddlSoftware.SelectedIndex !=0 && cbLedigeLicenser.Checked && !cbUdloebeneLicenser.Checked)
                {
                    dv.RowFilter = "UdgiverNavn ='"+ddlUdgiver.SelectedItem.Text+"'"+"AND SoftwareNavn ='"+ddlSoftware.SelectedItem.Text+"'"+"AND Status="+1;
                }

                else if(ddlSoftware.SelectedIndex !=0 && cbUdloebeneLicenser.Checked && !cbLedigeLicenser.Checked)
                {
                    dv.RowFilter = "UdgiverNavn ='"+ddlUdgiver.SelectedItem.Text+"'"+"AND SoftwareNavn ='"+ddlSoftware.SelectedItem.Text+"'"+"AND UdloebsDato <'"+DateTime.Now.Date+"'";
                }

                else if (ddlSoftware.SelectedIndex !=0 && cbUdloebeneLicenser.Checked && cbLedigeLicenser.Checked)
                {
                    dv.RowFilter = "UdgiverNavn ='"+ddlUdgiver.SelectedItem.Text+"'"+"AND SoftwareNavn ='"+ddlSoftware.SelectedItem.Text+"'"+"AND UdloebsDato <'"+DateTime.Now.Date+"'"+"AND Status="+1;
                }
               
               
                dgOversigt.Visible = true;
                dgOversigt.DataSource = dv;
                dgOversigt.DataBind();
            }

            dgOversigt.Visible = true;

        }
        private void ddlUdgiver_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            if(ddlUdgiver.SelectedIndex !=0)
            {
                ddlSoftwareBind();
            }
            else
            {
                ddlSoftware.Items.Clear();
            }

        }

        private bool tjekDato(DateTime dt)
        {
            bool tilstand = false;
            TimeSpan ts = dt.Subtract(DateTime.Now.Date);
            if(ts.TotalDays<=0)
            {
                tilstand = true;
            }

            return tilstand;
            }

       
        private void dgOversigt_ItemCommand_1(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            txtNote.Visible = false;
            string note;
            SqlCommand HentNoteCmd  = sqlCon.CreateCommand();   
           
            HentNoteCmd.CommandType = CommandType.Text;
            HentNoteCmd.CommandText = "SELECT Note FROM Licens WHERE LicensID="+dgOversigt.DataKeys[e.Item.ItemIndex].ToString();       
           
            sqlCon.Open();
            note = HentNoteCmd.ExecuteScalar().ToString();
            sqlCon.Close();

            if(!note.Equals(""))
            {
                txtNote.Text = note;
                txtNote.Visible = true;
            }
        }

        int temp = 0;

        private void dgOversigt_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        {
            //|| e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem
            if(e.Item.ItemType == ListItemType.Header)
            {
            e.Item.Cells[1].Visible = false;
            }
        }

       
        }
    }
Avatar billede snepnet Nybegynder
09. oktober 2004 - 01:24 #12
hmmm... sidder egentlig og bliver lidt i tvivl om hvad du mener.... Jeg tror sådan lige umiddelbart at du kunne løbe ind i problemer fordi itemdatabound kaldes efter itemcommand.
debugger du nogensinde ?
(for så kan du kontrollere sekvensen ved debugging).

det ville være fint, hvis du lige prøvede med en anden formulering af den her :
"når jeg har valgt en select knap og så klikker på den næste select knap, forvandles teksten på den forrige colonne hvor jeg havde klikket på select, til det samme inden jeg brugte ItemCreated event".

mvh
Avatar billede ihtezaz Praktikant
09. oktober 2004 - 17:38 #13
Hej snepnet

Fejlen er at betingelsen her:                
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)

betingelsen lader ikke compileren gå igennem for den colonne hvor man har klikket på select cmd ud for.
Avatar billede ihtezaz Praktikant
09. oktober 2004 - 17:42 #14
har fundet fejlen, betingelsen skulle rettes til følgende:
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.SelectedItem)

Men tak snepnet, vi snakkes ved, jeg laver jo nok igen et spørgsmål snart :->
Avatar billede snepnet Nybegynder
09. oktober 2004 - 18:20 #15
det var i hvert fald så lidt :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