none
GridView中动态显示Dropdownlist RRS feed

  • 问题

  • 我的gridview设计如下:

    <asp:BoundField DataField="UserSchool" HeaderText="学校" /> //假设这是第一列
                            <asp:TemplateField HeaderText="学校" Visible="false"> //这是第二列
                                  <ItemTemplate>
                                      <asp:DropDownList ID="DDL_School" runat="server" AutoPostBack="true" DataSource="<%#_dtSchool %>" DataTextField="SchoolName">
                                      </asp:DropDownList>
                             </ItemTemplate>

      <asp:ButtonField Text="编辑" CommandName="Edit" HeaderText="编辑" />

    当点击ButtonField中的按钮时会触发RowCommand事件,此时我想将第一列隐藏,将第二列显示出来,并且只有编辑的那行显示,请问该如何实现?

    2012年3月30日 1:31

答案

  • 我试过了,还是不可以显示,不知道什么原因。然后我改了下gridview,让dropdownlist和绑定的值在同一个列中,

     <asp:TemplateField HeaderText="学校" Visible="true">

                                  <ItemTemplate>    
                                        <span runat="server" id="span_school">
                                        <%#Eval("UserSchool") %>
                                        </span>                                                                
                                      <asp:DropDownList ID="DDL_School" runat="server" AutoPostBack="true" DataSource="<%#_dtSchool %>" DataTextField="SchoolName" Visible="false">
                                      </asp:DropDownList>
                                  </ItemTemplate>
                                  </asp:TemplateField>

    后台:

    protected void GV_UserInfo_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GV_UserInfo.Rows[e.NewEditIndex].FindControl("span_School").Visible = false;
            GV_UserInfo.Rows[e.NewEditIndex].FindControl("DDL_School").Visible = true;
        }

    这样就ok了。

    2012年3月30日 7:36

全部回复

  • 請問你的第一個列指的是第一個Column嗎?
    當你設定ButtonField的CommandName為Edit的時候,應該會觸發的是RowEditing事件,你可以嘗試利用下列程式碼來做隱藏。
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
     GridView1.Columns[0].Visible = false;
    }



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月30日 2:25
  • 請問你的第一個列指的是第一個Column嗎?
    當你設定ButtonField的CommandName為Edit的時候,應該會觸發的是RowEditing事件,你可以嘗試利用下列程式碼來做隱藏。
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
     GridView1.Columns[0].Visible = false;
    }



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/


    我的第一列是指的第一个column,但是当把column[0]隐藏的时候整个列都隐藏了,我只想隐藏一个单元格

    2012年3月30日 5:12
  • 楼主,尝试这样做:

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
     GridView1.Rows[e.NewEditIndex].Cells[索引].Visible = false;
    }

    或者你设置Read-Only=True:

    <asp:BoundField DataField="UserSchool" HeaderText="学校" ReadOnly=True/>


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月30日 6:11
  • 或許你可以先試試看Wei_Dong所說的方法,或是可以把你的aspx中有關GridView那段程式碼貼上來看看。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年3月30日 6:20
  • Wei_Dong的办法我试过了,是可以将那个单元格给隐藏掉,但是当我把含有dropdownlist的那个列给显示的时候却还是显示不出来。

                                                                                                                                                                                        

    <asp:GridView ID="GV_UserInfo" runat="server" AllowPaging="True" CellPadding="4" 
                            ForeColor="#333333" GridLines="None" AutoGenerateColumns="False"  
                                  onrowcommand="GV_UserInfo_RowCommand" 
                                 onpageindexchanging="GV_UserInfo_PageIndexChanging" 
                                 onrowdeleting="GV_UserInfo_RowDeleting" >
                            <RowStyle BackColor="#EFF3FB" />
                              <Columns>
                                  <asp:TemplateField HeaderText="序号"><ItemTemplate><%#(Container.DataItemIndex+1) %></ItemTemplate></asp:TemplateField>
                                  <asp:BoundField DataField="UserName" HeaderText="用户名" />
                                  <asp:BoundField DataField="UserTrueName" HeaderText="真实姓名" />
                                  <asp:BoundField DataField="UserSchool" HeaderText="学校" />
                                  <asp:TemplateField HeaderText="学校" Visible="false">
                                  <ItemTemplate>

                                      <asp:DropDownList ID="DDL_School" runat="server" AutoPostBack="true" DataSource="<%#_dtSchool %>" DataTextField="SchoolName">
                                      </asp:DropDownList>
                                  </ItemTemplate>


                                  </asp:TemplateField>
                                  <asp:BoundField DataField="UserDegree" HeaderText="学历" />
                                  <asp:TemplateField HeaderText="学历" Visible="False">
                                    <ItemTemplate>
                                        <asp:DropDownList ID="DDL_Degree" runat="server" AutoPostBack="true" DataSource="<%#_alDegree %>">
                                        </asp:DropDownList>
                                    </ItemTemplate>
                                  </asp:TemplateField>
                                  <asp:BoundField DataField="AuthorityName" HeaderText="权限" />
                                  <asp:TemplateField HeaderText="权限" Visible="False">
                                    <ItemTemplate>
                                        <asp:DropDownList ID="DDL_Authority" runat="server" AutoPostBack="true" DataSource="<%#_alAuthority %>">
                                        </asp:DropDownList>
                                    </ItemTemplate>
                                  </asp:TemplateField>
                                  <asp:BoundField DataField="UserStatus" HeaderText="用户状态" />
                                  <asp:CommandField DeleteText="&lt;div id=&quot;delete&quot; onclick=&quot;JavaScript:return confirm('确定删除此信息?')&quot;&gt;删除&lt;/div&gt;" 
                                      HeaderText="删除" ShowDeleteButton="True" />
                                  <asp:ButtonField Text="编辑" CommandName="Edit" HeaderText="编辑" />


                              </Columns>
                            <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White"/>
                            <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                            <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                            <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                            <EditRowStyle BackColor="#2461BF" />
                            <AlternatingRowStyle BackColor="White" />                    </asp:GridView>

    后台里:

                GV_UserInfo.Rows[e.NewEditIndex].FindControl("DDL_School").visible=true;

    2012年3月30日 6:52
  • Hi,TerryChuang

    后来我想会不会是因为是两个列而不是同一个列的问题呢?如果说把dropdownlist和绑定的值放在同一个template中是不是就可以实现了,可是用了后发现依然不可以显示dropdownlist。。。。。。。求救啊。。

    2012年3月30日 6:57
  • 尝试使用Cells设置而不是设置FindControl——“索引”表示Dropdownlist所在的那个单元格位置:

     GridView1.Rows[e.NewEditIndex].Cells[索引].Visible = true;

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月30日 6:58
  • 我试过了,还是不可以显示,不知道什么原因。然后我改了下gridview,让dropdownlist和绑定的值在同一个列中,

     <asp:TemplateField HeaderText="学校" Visible="true">

                                  <ItemTemplate>    
                                        <span runat="server" id="span_school">
                                        <%#Eval("UserSchool") %>
                                        </span>                                                                
                                      <asp:DropDownList ID="DDL_School" runat="server" AutoPostBack="true" DataSource="<%#_dtSchool %>" DataTextField="SchoolName" Visible="false">
                                      </asp:DropDownList>
                                  </ItemTemplate>
                                  </asp:TemplateField>

    后台:

    protected void GV_UserInfo_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GV_UserInfo.Rows[e.NewEditIndex].FindControl("span_School").Visible = false;
            GV_UserInfo.Rows[e.NewEditIndex].FindControl("DDL_School").Visible = true;
        }

    这样就ok了。

    2012年3月30日 7:36