2011-06-01 77 views
0

我使用Templates和所有這些構建了一個可定製的GridView。我提供了<ItemTemplate><EditItemtemplate>具有TextBoxes,DropDownList和RadioButtonList控件的字段。現在我想使用方法(函數)來呈現數據(例如,在db表中,我將性別設置爲True(forMale)和False(對於女性)。現在我希望GridView中的Label控件調用方法,傳遞整個GridView行,然後該方法應該返回一個字符串「男性」,如果性別==真在DB和這個字符串應該是文本的標籤,稱爲該方法)...在Asp.Net中需要自定義GridView控件的幫助

此外,當我編輯任何Row,我已經說過,RadioButtonList是用於性別的,但默認情況下沒有選擇單選按鈕。如果用戶忘記單擊單選按鈕,則會導致錯誤。我希望它檢查性別的以前的值,並根據以前的值保留一個單選按鈕。 此外,當我按編輯按鈕,我不能在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 
} 

回答

1

您可以在GridView的RowDataBound事件使用的FindControl。看到這一點:在MSDN上RowDataBound function of GridView

和一些細節: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"); 

     } 

    } 
+0

謝謝兄弟,但讓我這樣說:我如何才能找到的控制 ????從哪個方法? – suhail 2011-06-03 07:35:15

+0

在我的答案中添加了示例代碼。 – FiveTools 2011-06-03 16:28:01