Avatar billede connor Nybegynder
24. oktober 2003 - 08:39 Der er 5 kommentarer og
1 løsning

Indsætte dropdown i datagrid

Jeg udtrækker noget data fra en database som bliver presenteret i et datagrid.
Til en af kolonnerne ønsker jeg at indsætte en dropdown, som er gennemgående hele vejen ned.

Kan man dette og hvis ja hvordan?
Avatar billede thor.ostergaard Nybegynder
24. oktober 2003 - 08:46 #1
Du kan konvertere kolonnen til en "template column" og indsætte din dropdown i den.
Avatar billede connor Nybegynder
24. oktober 2003 - 09:23 #2
du har ikke noget kode som kan illustrere dette?
Avatar billede thor.ostergaard Nybegynder
24. oktober 2003 - 09:36 #3
Tjo...
<asp:DataGrid id="dgTester" runat="server" AutoGenerateColumns="False" BorderColor="#DEBA84" BorderStyle="None"
CellSpacing="2" BorderWidth="1px" BackColor="#DEBA84" CellPadding="3" DataKeyField="Produktnavn"
SelectedIndex="3">
<SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#738A9C"></SelectedItemStyle>
<ItemStyle ForeColor="#8C4510" BackColor="#FFF7E7"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#A55129"></HeaderStyle>
<FooterStyle ForeColor="#8C4510" BackColor="#F7DFB5"></FooterStyle>
<Columns>
    <asp:ButtonColumn Text="Select" CommandName="Select"></asp:ButtonColumn>
    <asp:BoundColumn DataField="Produktnavn" HeaderText="Produktnavn"></asp:BoundColumn>
    <asp:TemplateColumn HeaderText="Url">
        <ItemTemplate>
            <asp:DropDownList id="DropDownList1" runat="server">
                <asp:ListItem Value="asd">asd</asp:ListItem>
                <asp:ListItem Value="fsd">fsd</asp:ListItem>
                <asp:ListItem Value="fs">fs</asp:ListItem>
            </asp:DropDownList>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.URL") %>'>
            </asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Center" ForeColor="#8C4510" Mode="NumericPages"></PagerStyle>
</asp:DataGrid>


Du skal nok forholde dig lidt til EditItemTemplate - der skal nok ikke være en tekstbox...
Avatar billede jettes Nybegynder
24. oktober 2003 - 09:50 #4
Hvis du ønsker at trække værdierne til din dropdown fra din DB, kan dette gøres i en item_databound hændelses handler sub i code-behind.
Avatar billede connor Nybegynder
24. oktober 2003 - 11:01 #5
Det er egentlig ikke meningen at selve værdierne i dropdownlisten skal være udtrukket fra DB'en. Det skal bare være 5 statiske punkter. Problemet er nu at få gemt den valgte værdi fra dropdownlisten i en variabel og bruge den til at ændre indholdet i en bestemt kolonne i DB'en.

Her er kildekoden (måske lidt rodet):

<%@ Page Language="C#" Debug="true" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDb" %>
<script runat="server">

    DropDownList myList;

    void Page_Load(Object sender, EventArgs e) {

        if (!IsPostBack) {
            BindGrid();
            }
    }

    public void BindGrid() {

        MyDataGrid.DataSource = GetAllUsers();
        MyDataGrid.DataBind();
        }

    public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e) {

        label1.Text = "";
        MyDataGrid.EditItemIndex = (int)e.Item.ItemIndex;
        BindGrid();
        }

    public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e) {

        MyDataGrid.EditItemIndex = -1;
        BindGrid();
        }

    public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e) {

        //if (myList.SelectedIndex != -1) label1.Text = myList.SelectedItem.Text;

        label1.Text = "Thanks for trying to edit the DataGrid!";

        MyDataGrid.EditItemIndex = -1;
        BindGrid();
        }

    DataView GetAllUsers() {
        string sConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" +    "Data Source= " + Server.MapPath("agro.mdb")+";";
        string  sql ="Select * From menu;";

        OleDbConnection con = new OleDbConnection(sConnection);
        DataSet ds = new DataSet();
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql,con);
        dataAdapter.Fill(ds, "menu");
        DataTable table = ds.Tables["menu"];

        return ds.Tables["menu"].DefaultView;
    }

    public void DataGrid_ItemDataBound(Object sender, DataGridItemEventArgs e) {

      ListItemType itemType = e.Item.ItemType;

      if (itemType == ListItemType.EditItem) {

          myList = (DropDownList) e.Item.FindControl("myList");

          //DataRowView myRow = (DataRowView) e.Item.DataItem;

          //string myRole = myRow["Link"].ToString();

          //myList.DataTextField = "RoleName";
          //myList.DataValueField = "RoleID";
          //myList.DataSource = GetRoles();
          //myList.DataBind();
          //myList.Items.FindByValue(myRole).Selected = true;
          myList.Items.Add(new ListItem("Skabelon 1"));
          myList.Items.Add(new ListItem("Skabelon 2"));
          myList.Items.Add(new ListItem("Skabelon 3"));
          myList.Items.Add(new ListItem("Skabelon 4"));
          myList.Items.Add(new ListItem("Skabelon 5"));
      }
    }

</script>
<html>
<head>
</head>
<body style="FONT: 10pt verdana">
    <form runat="server">
        <h3><font face="Verdana">Edit/Delete Users</font>
        </h3>
        <asp:datagrid id="MyDataGrid" runat="server" bordercolor="black" borderwidth="1" cellpadding="3" font-name="Verdana" font-size="8pt" headerstyle-backcolor="#aaaadd" OnEditCommand="MyDataGrid_Edit" OnCancelCommand="MyDataGrid_Cancel" OnUpdateCommand="MyDataGrid_Update" OnItemDataBound="DataGrid_ItemDataBound" AutoGenerateColumns="false">
            <columns>
                <asp:editcommandcolumn edittext="Edit" canceltext="Cancel" updatetext="Update" itemstyle-wrap="false" />
                <asp:templatecolumn headertext="UserID" visible="false">
                    <itemtemplate>
                        <asp:Label id="CategoryIDItem_lbl" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "CategoryID") %>' />
                    </itemtemplate>
                    <edititemtemplate>
                        <asp:Label id="CategoryIDEdit_lbl" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "CategoryID") %>' />
                    </edititemtemplate>
                </asp:templatecolumn>
                <asp:templatecolumn headertext="CategoryName">
                    <itemtemplate>
                        <asp:Label id="CategoryNameItem_lbl" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "CategoryName") %>' />
                    </itemtemplate>
                </asp:templatecolumn>
                <asp:templatecolumn headertext="Link">
                    <itemtemplate>
                        <asp:Label id="LinkItem_lbl" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "Link") %>' />
                    </itemtemplate>
                </asp:templatecolumn>
                <asp:templatecolumn headertext="ADMLink">
                    <itemtemplate>
                        <asp:Label id="ADMLinkItem_lbl" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "ADMLink") %>' />
                    </itemtemplate>
                </asp:templatecolumn>
                <asp:templatecolumn headertext="DropDownList">
                    <itemtemplate>
                        <asp:Label id="DropDownList_lbl" runat="server" />
                    </itemtemplate>
                    <edititemtemplate>
                        <asp:dropdownlist id="myList" runat="server" />
                    </edititemtemplate>
                </asp:templatecolumn>
            </columns>
        </asp:datagrid>
    </form>
    <br />
    <asp:Label id="label1" runat="server"></asp:Label>
</body>
</html>
Avatar billede connor Nybegynder
25. oktober 2003 - 17:04 #6
Tak for svar...

Har nu løst problemet...
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