【问题标题】:Need help with customizing GridView control in Asp.Net在 Asp.Net 中自定义 GridView 控件时需要帮助
【发布时间】:2011-06-01 18:30:53
【问题描述】:

我用模板和所有这些构建了一个可定制的 GridView。我提供了具有 TextBoxes、DropDownList 和 RadioButtonList 控件的 <ItemTemplate><EditItemtemplate>fields。现在我想使用方法(函数)来呈现数据(例如,在 db 表中,我的性别为 True(forMale)和 False(for Female)。现在我希望 GridView 中的 Label 控件调用方法,传递整个 GridView行到它,然后方法应该返回一个字符串“男性”如果性别==真在db中,这个字符串应该是调用该方法的标签的文本)....

此外,当我编辑任何行时,我已经放置了 RadioButtonList 表示性别,但默认情况下它没有选择单选按钮。如果用户忘记单击单选按钮,这会导致错误。我希望它检查 Gender 的先前值,并根据先前的值选择其中一个单选按钮。 此外,当我按下编辑按钮时,我无法使用 GridView1_rowupdating 方法中的 FindControl 方法来查找<EditItemTemplate> 的控件。我怎样才能找到它们?

另外,我在 GridView 中放置了两个按钮。我希望仅对那些approval_stage != 零的行启用这两个按钮。

部分代码在这里:

MyFile.aspx:-

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowSorting="True" PageSize="3" DataKeyNames="request_no" onrowediting="GridView1_RowEditing" onrowupdating="GridView1_RowUpdating" >

<Columns>

<asp:ButtonField DataTextField="request_no" HeaderText="request_no" CommandName="request_no" />

<asp:TemplateField HeaderText="date">

  <EditItemTemplate>
      <asp:Calendar ID="Calendar1" runat="server" ></asp:Calendar>
  </EditItemTemplate>

  <ItemTemplate>
      <asp:Label ID="Label5" runat="server" Text='<%# Bind("date") %>'></asp:Label>
  </ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="approval_stage">
  <EditItemTemplate>
    <asp:DropDownList ID="DropDownListApproval" runat="server">
      <asp:ListItem Value ="0" >0</asp:ListItem>
      <asp:ListItem Value ="1" >1</asp:ListItem>
      <asp:ListItem Value ="2" >2</asp:ListItem>
      <asp:ListItem Value ="3" >3</asp:ListItem>
      <asp:ListItem Value ="4" >4</asp:ListItem>
    </asp:DropDownList>
</EditItemTemplate>

<ItemTemplate>
    <asp:Label ID="Label1" runat="server" Text='<%# DisplayApproval(Eval("approval_stage")) %>'></asp:Label>
</ItemTemplate>



 </asp:TemplateField>
    <asp:BoundField DataField="name" HeaderText="name" />
    <asp:TemplateField HeaderText="gender">
    <EditItemTemplate>
    <asp:RadioButtonList ID="RadioButtonListGender" runat="server">
    <asp:ListItem Value="False">Male</asp:ListItem>
    <asp:ListItemValue="True">Female</asp:Li…
    </asp:RadioButtonList>
    </EditItemTemplate>
    <ItemTemplate>
    <asp:Label ID="Label2" runat="server" Text='<%# DisplayGender(Eval("gender")) %>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:ButtonField ButtonType="Button" CommandName="approve" Text="approve" />
    <asp:ButtonField ButtonType="Button" CommandName="reject" Text="reject" />
    <asp:CommandField ButtonType="Button" HeaderText="Edit" ShowEditButton="True" ShowHeader="True" />
    </Columns>
    </asp:GridView>



protected string DisplayGender(object gender)
{
string str = gender.ToString();
if (str == "False")
str = "Male";
else if (str == "True")
str = "Female";

return str;
}

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//Some Code here
}

【问题讨论】:

    标签: c# asp.net templates gridview


    【解决方案1】:

    你可以在gridview的rowdatabound事件中使用findcontrol。看到这个:RowDataBound function of GridView

    还有一些关于msdn的细节:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound.aspx

     protected void MyGrid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowState == DataControlRowState.Edit)
            {
                Label lbl = (Label)e.Row.FindControl("lblId");
    
            }
    
        }
    

    【讨论】:

    • 谢谢兄弟,但让我这样说吧:我怎样才能找到 的控件????用什么方法?
    猜你喜欢
    • 2010-12-31
    • 2014-08-11
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多