【问题标题】:How to get values before bind into Gridview using c# asp.net如何在使用 c#asp.net 绑定到 Gridview 之前获取值
【发布时间】:2015-10-31 15:28:05
【问题描述】:

我正在从数据库中检索一些数据并使用 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,来自gridview 的拒绝链接按钮颜色将为红色,否则接受链接来自同一网格视图的按钮颜色将为绿色。类似地,在链接按钮的每个单击事件中,我想检查链接按钮的背景颜色,以便我可以更新 DB 中的状态。请帮助我。

【问题讨论】:

    标签: c# asp.net gridview asplinkbutton


    【解决方案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;
        }
    }
    

    请注意,您需要更改索引以表示正确的单元格。如果您想根据列名获取正确的单元格,您可以执行本文中所述的操作:How to get the cell value by column name not by index in GridView in asp.net

    您还可以通过替换此行来更改整行的背景颜色:

    e.Row.Cell[2].BackColor = System.Drawing.Color.Red;
    

    用这一行:

    e.Row.BackColor = System.Drawing.Color.Red;
    

    在 OnClick 事件中访问行信息:

    将健康评论状态值添加到 Accept 链接的 commandargument 属性。首先更新链接如下:

    <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];
    }
    

    还要注意更新代码以使用正确的单元格索引。或者您可以使用前面提到的相同解决方案按列名获取单元格。

    【讨论】:

    • @ Maurits:好的,让我再解释一下。我的数据库中有一个字段名Health_Comment_Status,它通过方法调用objhealthCommentBL.getHealthCommentDetails() 以及其他数据检索。我需要这个字段的值是R 拒绝链接按钮将在 Gridview 中显示为红色,同样,当用户单击拒绝按钮时,将检查状态。
    • @ Maurits:好的,你的回答对我有帮助。你能帮我解决另一个疑问吗。现在我的拒绝按钮是红色的。如果我点击接受链接按钮,我需要在 onclick 事件中再次检查状态。
    • @ Maurits:你可以在我的帖子中查看gridview的单元格。第一个单元格中没有类似的状态。
    • @satya 抱歉,我确实应该检查一下。我已经更新了我的答案来解决这个问题。希望这会有所帮助。
    猜你喜欢
    • 2018-11-02
    • 2021-04-16
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    相关资源
    最近更新 更多