我已经实现了点击每一行的edit按钮,每个数据项就变成HeadText,可以输入修改的内容。我想做得更好一些,例如某一个数据项引用到其他的数据项,我想把它变成droplist下拉菜单,显示我要选择的引用的内容。如何做到?

解决方案 »

  1.   

    参考一下:
    前台:
    <EditItemTemplate>
    <asp:DropDownList DataTextField="mc" DataValueField="lsh" DataSource='<%# GetSource() %>' id=ddl_yplx runat="server" Width="100%" SelectedValue='<%# DataBinder.Eval(Container, "DataItem.type") %>'>
    </asp:DropDownList>
    </EditItemTemplate>
    后台:
    protected DataSet GetSource()
    {
         return [数据集];
    }
      

  2.   

    在datagrid里面添加一个模板列,然后编辑这个模板列,添加一个drplist。
      

  3.   

    前台:
    <EditItemTemplate>
    <asp:DropDownList DataTextField="mc" DataValueField="lsh" id=List1
    runat="server" Width="100%" > </asp:DropDownList>
    </EditItemTemplate>
    后台代码:
    private void Datagrid2_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
                       DropDownList list=(DropDownList)e.Item.FindControl("List1");
    if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item )
    {
                                  SqlDataAdapter da=new SqlDataAdapter(SQL语句,连接字符串);
                                  DataSet ds=new DataSet();
                                  da.Fill(ds);
                                  list.DataSource=ds.Tables[0];
                                  list.DataTextField="引用的数据项在数据表中的列名"
                                  list.DataBind();
                                  
                               }
      

  4.   

    前台
    <P><asp:datagrid id="DataGrid1" runat="server" GridLines="None" CellPadding="3" BackColor="White"BorderWidth="2px" CellSpacing="1" AutoGenerateColumns="False" DataKeyField="comKey" BorderStyle="Ridge"BorderColor="White" Width="176px">
    <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#9471DE"></SelectedItemStyle>
    <ItemStyle ForeColor="Black" CssClass="item" BackColor="#DEDFDE"></ItemStyle>
    <HeaderStyle Font-Bold="True" ForeColor="#E7E7FF" BackColor="#4A3C8C"></HeaderStyle>
    <FooterStyle ForeColor="Black" BackColor="#C6C3C6"></FooterStyle>
    <Columns>
    <asp:EditCommandColumn ButtonType="PushButton" UpdateText="Update" CancelText="Cancel" EditText="Edit"></asp:EditCommandColumn>
    <asp:ButtonColumn Text="Delete" ButtonType="PushButton" CommandName="Delete"></asp:ButtonColumn>
    <asp:TemplateColumn HeaderText="StaffID">
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem,"StaffID") %>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:BoundColumn DataField="UnitCode" HeaderText="UnitCode"></asp:BoundColumn>
    <asp:BoundColumn DataField="Year" HeaderText="Year"></asp:BoundColumn>
    <asp:BoundColumn DataField="Semester" HeaderText="Semester"></asp:BoundColumn>
    </Columns>
    <PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#C6C3C6"></PagerStyle>
    </asp:datagrid>
    后台:
    private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    OleDbConnection conn = new OleDbConnection();conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
    @"Data source= C:\Downloaded\Uq\Yr3\INFS3204\Project\projectdb.mdb";string mySelectQuery  = "select StaffID from Staff";
    OleDbDataAdapter da = new OleDbDataAdapter(mySelectQuery,conn);DataSet ds = new DataSet();
    da.Fill(ds,"Staff");
    DropDownList list = (DropDownList)e.Item.FindControl("DropDownList1");
    list.DataSource=ds.Tables["Staff"];
    list.DataTextField="StaffID";
    list.DataValueField="StaffID";
    list.DataBind();
    list.Items.Insert(0,new ListItem("Please Select",""));
    }
    运行结果错误出在这句话
    list.DataSource=ds.Tables["Staff"];
    错误原因是Object reference not set to an instance of an object
      

  5.   

    难道系统找不到list是什么?就是说找不到DropDownList1???
      

  6.   

    那是,因为你要使用DropDownList必须先
    this.DataGrid1.EditItemIndex = e.Item.ItemIndex;//让DataGrid处于编辑状态
    你可以尝试用我的方法啊,我都用的好好的啊
      

  7.   

    唉,还是不行啊。怎么回事啊。我快疯掉了。我觉得这个ASP版本很有问题。
    To Stoneallen():你的代码不知道呢,很奇怪,运行以后就出现parser error,解析不了你的<asp:DropDownList DataTextField="mc" DataValueField="lsh" DataSource='<%# GetSource() %>' id=ddl_yplx runat="server" Width="100%" SelectedValue='<%# DataBinder.Eval(Container, "DataItem.type") %>'>
      

  8.   

    我通过Debug跟踪,发现DropDownList list = (DropDownList)e.Item.FindControl("DropDownList1");
    这句根本没有找到DropDownList1那个控件,你觉得这问题出在哪里?太奇怪了。
      

  9.   

    前台:
    <asp:DropDownList DataTextField="StaffID" DataValueField="StaffID" DataSource='<%# GetSource() %>' id=DropDownList1 runat="server" Width="100%">
    后台:
    protected DataSet GetSource()
    {
         OleDbConnection conn = new OleDbConnection();     conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
    @"Data source= C:\Downloaded\Uq\Yr3\INFS3204\Project\projectdb.mdb";     string mySelectQuery  = "select StaffID from Staff";
         OleDbDataAdapter da = new OleDbDataAdapter(mySelectQuery,conn);     DataSet ds = new DataSet();
         da.Fill(ds,"Staff");     return ds;
    }
    这样不行吗?