Как получить значения перед привязкой в Gridview с помощью C# asp.net
Я извлекаю некоторые данные из базы данных и собираюсь выполнить привязку в представлении Grid, используя C# asp.net. Сначала я хотел бы объяснить свой код, а затем я объясню свои требования.
index.aspx:
<asp:GridView ID="comnt_Gridview" runat="server" AutoGenerateColumns="false" Width="100%" CssClass="table table-striped table-bordered margin-top-zero" OnRowDataBound="comnt_Gridview_RowDataBound" DataKeyNames="Health_Comment_ID" >
<Columns>
<asp:TemplateField HeaderText="Sl. No" ItemStyle-CssClass="col-md-1 col-sm-1">
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
</ItemTemplate>
<ItemStyle CssClass="col-md-1 col-sm-1"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Health ID" ItemStyle-CssClass="col-md-1 col-sm-1" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Label ID="healthid" runat="server" Text='<%#Eval("Health_ID") %>'></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" CssClass="col-md-1 col-sm-1"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name" ItemStyle-CssClass="col-md-1 col-sm-1" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Label ID="Name" runat="server" Text='<%#Eval("Health_Comment_Name") %>'></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" CssClass="col-md-1 col-sm-1"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Email" ItemStyle-CssClass="col-md-2 col-sm-2" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Label ID="Email" runat="server" Text='<%#Eval("Health_comment_Email") %>'></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" CssClass="col-md-2 col-sm-2"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Web Url" ItemStyle-CssClass="col-md-2 col-sm-2" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Label ID="Url" runat="server" Text='<%#Eval("Health_Comment_Website") %>'></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" CssClass="col-md-2 col-sm-2"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Comments" ItemStyle-CssClass="col-md-3 col-sm-3" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:Label ID="lblRemark" runat="server"Text='<%# Eval("Health_Comment_Message").ToString().Length > 100? (Eval("Health_Comment_Message") as string).Substring(0,100) + " ..." : Eval("Health_Comment_Message") %>'ToolTip='<%# Eval("Health_Comment_Message") %> '> </asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" CssClass="col-md-3 col-sm-3">
</ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Status" ItemStyle-CssClass="col-md-1 col-sm-1" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<div class="btn-group btn-toggle">
<asp:LinkButton ID="accept" CssClass="btn btn-xs btn-inactive" CommandName="Accept" runat="server" style="padding:1px 2px;" Text="Accept" onclick="accept_click" CommandArgument='<%#Eval("Health_Comment_ID")%>'></asp:LinkButton>
<asp:LinkButton ID="reject" runat="server" Text="Reject" CommandName="Reject" CssClass="btn btn-xs btn-success active" style="padding:1px 2px;" onclick="reject_Click" CommandArgument='<%#Eval("Health_Comment_ID")%>' ></asp:LinkButton>
</div>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" CssClass="col-md-2 col-sm-2"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Action" ItemStyle-CssClass="col-md-2 col-sm-2" >
<ItemTemplate>
<a href="javascript:void(0)" data-toggle="tooltip" title="" class="btn btn-xs btn-success" data-original-title="View" onClick="doctordetailsshowdiv()"><i class="fa fa-eye"></i></a>
</ItemTemplate>
<ItemStyle CssClass="col-md-2 col-sm-2"></ItemStyle>
</asp:TemplateField>
</Columns>
</asp:GridView>
index.aspx.cs:
namespace ODIYA_Doctor_Admin.Module.Front_End_Management
{
public partial class HealthComment : System.Web.UI.Page
{
private healthCommentBL objhealthCommentBL = new healthCommentBL();
protected void Page_Load(object sender, EventArgs e)
{
lbluname.Text = Session["username"].ToString().Substring(0, Session["username"].ToString().IndexOf(' '));
Session["update"] = Server.UrlEncode(System.DateTime.Now.ToString());
comnt_Gridview.DataSource = objhealthCommentBL.getHealthCommentDetails();
comnt_Gridview.DataBind();
}
protected void comnt_Gridview_RowDataBound(object sender, GridViewRowEventArgs e)
{
}
}
}
Есть Health_Comment_Status
значение поля, которое я получаю из базы данных. Вот мое требование, прежде чем связывать в gridview, если Health_Comment_Status
значение будет R
цвет кнопки отклонения ссылки из вида сетки будет красным, в противном случае цвет кнопки подтверждения ссылки из этого же вида сетки будет зеленым. Аналогично в каждом событии щелчка кнопки ссылки я хочу проверить цвет кнопки ссылки назад, чтобы я мог обновить пожалуйста, помогите мне.
1 ответ
Теперь все немного яснее. Я разделил свой ответ на две части. В первой части я объясню, как изменить цвет фона, а во второй части я объясню, как получить доступ к значению состояния в событии OnClick по ссылке (или кнопке).
Изменение цвета фона:
Чтобы изменить цвет фона ссылки "Отклонить" в элементе управления GridView, можно подключиться к событию RowDataBound. Вот пример кода:
protected void EmployeeAvailabilityGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
try
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if(DataBinder.Eval(e.Row.DataItem, "Health_Comment_Status") == "R")
{
e.Row.Cell[2].BackColor = System.Drawing.Color.Red;
}
}
}
catch (Exception ex)
{
//ErrorLabel.Text = ex.Message;
}
}
Обратите внимание, что вам нужно изменить индекс для представления правильной ячейки. Если вы хотите получить правильную ячейку на основе имени столбца, вы можете сделать что-то вроде описанного в этом посте: Как получить значение ячейки по имени столбца, а не по индексу в GridView в asp.net
Вы также можете изменить цвет фона всей строки, заменив эту строку:
e.Row.Cell[2].BackColor = System.Drawing.Color.Red;
с этой строкой:
e.Row.BackColor = System.Drawing.Color.Red;
Доступ к информации о строке в событии OnClick:
Добавьте значение состояния комментария к работоспособности в свойство commandargument ссылки Accept. Сначала обновите ссылку следующим образом:
<asp:LinkButton ID="accept" CssClass="btn btn-xs btn-inactive" CommandName="Accept" runat="server" style="padding:1px 2px;" Text="Accept" onclick="accept_click" CommandArgument='<%#Eval("Health_Comment_ID")%>|<%#Eval("Health_Comment_Status")%>'></asp:LinkButton>
Во-вторых, измените обработчик события OnClick на что-то вроде этого:
protected void linkButton_click(object sender, EventArgs e)
{
LinkButton btn = (LinkButton)sender;
string[] commandArgs = btn.CommandArgument.Split('|')
if(commandArgs.Length <= 1 then
return;
string healthCommentStatus = commandArgs[1];
}
Также обратите внимание, чтобы обновить код для использования правильного индекса ячейки. Или вы можете использовать то же решение, упомянутое ранее, чтобы получить ячейку по имени столбца.