проблема с заполнением выпадающего списка gridview - PullRequest
0 голосов
/ 24 мая 2011

              OnRowDataBound="grdViewCInfo_RowDataBound"

             >

        <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
        <Columns>

         <asp:TemplateField HeaderText="Concert Name" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" ItemStyle-Width="150px" ItemStyle-Wrap="true">
                <ItemTemplate>
                    <asp:Label ID="lblName" runat="server" Text='<%#Bind("Concert_Name") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtName" runat="server" Text='<%#Bind("Concert_Name") %>'></asp:TextBox>
                </EditItemTemplate>
            <HeaderStyle HorizontalAlign="Center" Height="40px"></HeaderStyle>

        <ItemStyle HorizontalAlign="Center"></ItemStyle>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Address" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" ItemStyle-Width="150px" ItemStyle-Wrap="true">
                <ItemTemplate>
                    <asp:Label ID="lblAddr" runat="server" Text='<%#Bind("Address") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtAddr" runat="server" Text='<%#Bind("Address") %>'></asp:TextBox>
                </EditItemTemplate>
            <HeaderStyle HorizontalAlign="Center" Height="40px"></HeaderStyle>

        <ItemStyle HorizontalAlign="Center"></ItemStyle>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="City" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <asp:Label ID="lblCity" runat="server" Text='<%#Bind("City") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtCity" runat="server" Text='<%#Bind("City") %>'></asp:TextBox>
                </EditItemTemplate>
                <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
                <ItemStyle HorizontalAlign="Center"></ItemStyle>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Pincode" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <asp:Label ID="lblPincode" runat="server" Text='<%#Bind("Pincode") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtPincode" runat="server" Text=' <%#Bind("Pincode") %>'></asp:TextBox>
                </EditItemTemplate>
                <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
                <ItemStyle HorizontalAlign="Center"></ItemStyle>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Country" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <asp:Label ID="lblcountry" runat="server" Text='<%#Bind("Country") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                <asp:DropDownList ID="ddlCountry" runat="server" >                                               
                </asp:DropDownList>  

                </EditItemTemplate>
                <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
                <ItemStyle HorizontalAlign="Center"></ItemStyle>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Concert Date and Time" HeaderStyle-HorizontalAlign="Center"
                ItemStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <asp:Label ID="lblDateTime" runat="server" Text='<%#Bind("Concert_Date") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtDateTime" runat="server" Text='<%#Bind("Concert_Date") %>'></asp:TextBox>
                </EditItemTemplate>
                        <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
                        <ItemStyle HorizontalAlign="Center"></ItemStyle>
            </asp:TemplateField>

              <asp:CommandField ShowEditButton="True" CausesValidation="False">
                            <ItemStyle Width="50px" />
                     </asp:CommandField>
                     <asp:CommandField ShowDeleteButton="true">
                         <ItemStyle Width="50px" />
                     </asp:CommandField> 

        </Columns>
        <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
        <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
        <AlternatingRowStyle BackColor="White" />
    </asp:GridView>

Ответы [ 3 ]

1 голос
/ 24 мая 2011

Часть этого также должна быть сделана в RowDataBound.

Вот пример кода

private static DataSet ds;
private const string query = "select * from tblcountrynames";
protected void grdViewCInfo_RowEditing(object sender, GridViewEditEventArgs e)
{
    grdViewCInfo.EditIndex = e.NewEditIndex;

    //guessing that this is your databind event
    dbLoad();
}
protected void grdViewCInfo_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowState == DataControlRowState.Edit)
    {
        //your ddl
        DropDownList ddl = (DropDownList)e.Row.FindControl("ddlCountry");

        PopulateCountries(ddl, query);
        //grdViewCInfo.Rows[e.NewEditIndex].Cells[4].Controls.Add(ddl);
    }
}

private void PopulateCountries(DropDownList ddl, string query)
{
    if(ds!= null && ds.Tables[0].Rows.Count >0)

        MySqlConnection objMycon1 = new MySqlConnection(strProvider);
        //commenting open; as adapter doesn't need connection to be open
        //objMycon1.Open();
        MySqlCommand cmd1 = new MySqlCommand(query, objMycon1);
        MySqlDataAdapter da = new MySqlDataAdapter(cmd1);
        ds = new DataSet();
        da.Fill(ds);
        objMycon1.Close();
        objMycon1.Dispose();//comment if objMycon1 is not IDisposible

    }

    if (ds.Tables[0].Rows.Count > 0)
    {
        ddl.DataSource = ds;
        ddl.DataTextField = "Name";
        ddl.DataValueField = "ID";
        ddl.DataBind();
    }
}

Вот как это должно быть сделано.
Надеюсь, это поможет.

1 голос
/ 24 мая 2011

Что возвращает (DropDownList)grdViewCInfo.Rows[e.NewEditIndex].Cells[4].FindControl("ddlCountry");, установлено ddl

Я не думаю. Возможно, в этой ячейке нет элемента управления "ddlCountry".

Это любопытное совпадение, что линия,

//grdViewCInfo.Rows[e.NewEditIndex].Cells[4].Controls.Add(ddl);

закомментировано ниже.

0 голосов
/ 24 мая 2011

У вас есть раскрывающийся список в EditItemTemplate?

Редактировать: Я не думаю, что вы на самом деле находитесь в режиме редактирования в событии RowEditing.Если вы переместите свой код вниз к RowCommand,

Затем проверьте команду Edit.Оберните ваш код в что-то вроде

if(e.CommandName == "Edit")
{

// do your edit here.

}

Хотя сохраняйте строку grdViewCInfo.EditIndex = e.NewEditIndex;, так как вам это нужно там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...