none
一个Gridview中Dropdownlist的问题!!!! RRS feed

  • 问题

  • 代码很简单,实现的功能是,如果点击Edit (自带的),出现的Dropdownlist的初始选择值等于点击Edit以前的值

    public partial class Test2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            Label mytext = (Label)(GridView1.Rows[e.NewEditIndex].FindControl("Label1"));
     
            this.Label2.Text = mytext.Text;

            DropDownList mylist = (DropDownList)(GridView1.Rows[e.NewEditIndex].FindControl("DropDownList1"));

            mylist.ClearSelection(); (运行的时候报错为:Object reference not set to an instance of an object.)

            mylist.Items.FindByValue(mytext.Text).Selected = true;

        }
    }

    请问应该怎么修改啊!!!!!!急,想了几天了。。。
    • 已移动 孟宪会Moderator 2009年11月2日 2:57 (发件人:Web 相关讨论(IIS,IE8等))
    2009年11月1日 9:42

答案

  •   protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowState == DataControlRowState.Edit)
                {
                

                 DropDownList d =  ((DropDownList)e.Row.FindControl("DropDownList1"));
                   
                    d.DataSource = SqlDataSource2;
                    d.DataTextField = "mm";
                    d.DataValueField = "id";
                    d.DataBind();
                    d.Items.FindByText(((System.Data.DataRowView)e.Row.DataItem)["mm"].ToString()).Selected = true;
                }
            }

    2009年11月1日 12:32
  • 你好,

    如果你的GridView是使用edit模板的话,可以直接将值绑定到dripdownlist的selectedvalue就可以了。
    e.g.

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataKeyNames="Id" DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                    <asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" 
                        ReadOnly="True" SortExpression="Id" />
                    <asp:BoundField DataField="ImageName" HeaderText="ImageName" 
                        SortExpression="ImageName" />
                    <asp:BoundField DataField="Des" HeaderText="Des" SortExpression="Des" />
                    <asp:BoundField DataField="Path" HeaderText="Path" SortExpression="Path" />
                    <asp:TemplateField HeaderText="CategoryId" SortExpression="CategoryId">
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%# Bind("CategoryId") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <%--<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("CategoryId") %>'></asp:TextBox>--%>
                            <asp:DropDownList ID="DropDownList1" runat="server" 
                                SelectedValue='<%# Bind("CategoryId") %>' DataSourceID="SqlDataSource1" 
                                DataTextField="Name" DataValueField="Id">
                            </asp:DropDownList>
                            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                                ConnectionString="<%$ ConnectionStrings:test_EmployeeInfo_SKConnectionString %>" 
                                SelectCommand="SELECT * FROM [Category]"></asp:SqlDataSource>
                        </EditItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

    Microsoft Online Community Support
    2009年11月3日 2:48

全部回复

  • 未将对象引用设置为对象的实例!

    可能是编辑显示之前没有  DropDownList绑定造成的
    2009年11月1日 10:08
  • 怎么绑定啊,我都已经设置了Dropdownlist的选项值了。
    如果是代码的话,应该怎么改?

    之前写了个代码,是绑定了的,但是运行到
    this.Label2.Text = mytext.Text 又报一样的错,也就是说,总是一行代码跳不过
    2009年11月1日 10:22
  •   protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowState == DataControlRowState.Edit)
                {
                

                 DropDownList d =  ((DropDownList)e.Row.FindControl("DropDownList1"));
                   
                    d.DataSource = SqlDataSource2;
                    d.DataTextField = "mm";
                    d.DataValueField = "id";
                    d.DataBind();
                    d.Items.FindByText(((System.Data.DataRowView)e.Row.DataItem)["mm"].ToString()).Selected = true;
                }
            }

    2009年11月1日 12:32
  • 你好,

    如果你的GridView是使用edit模板的话,可以直接将值绑定到dripdownlist的selectedvalue就可以了。
    e.g.

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataKeyNames="Id" DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                    <asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" 
                        ReadOnly="True" SortExpression="Id" />
                    <asp:BoundField DataField="ImageName" HeaderText="ImageName" 
                        SortExpression="ImageName" />
                    <asp:BoundField DataField="Des" HeaderText="Des" SortExpression="Des" />
                    <asp:BoundField DataField="Path" HeaderText="Path" SortExpression="Path" />
                    <asp:TemplateField HeaderText="CategoryId" SortExpression="CategoryId">
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%# Bind("CategoryId") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <%--<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("CategoryId") %>'></asp:TextBox>--%>
                            <asp:DropDownList ID="DropDownList1" runat="server" 
                                SelectedValue='<%# Bind("CategoryId") %>' DataSourceID="SqlDataSource1" 
                                DataTextField="Name" DataValueField="Id">
                            </asp:DropDownList>
                            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                                ConnectionString="<%$ ConnectionStrings:test_EmployeeInfo_SKConnectionString %>" 
                                SelectCommand="SELECT * FROM [Category]"></asp:SqlDataSource>
                        </EditItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

    Microsoft Online Community Support
    2009年11月3日 2:48