получение значений из скрытых ячеек в gridview asp.net c# использование onrowdatabound
(например, чтобы установить цвет строки на основе скрытого значения)
Если у вас есть gridview, который имеет скрытые ячейки, как это
<asp:GridView ID="Timeevents" runat="server"
OnRowDataBound="Timeevents_RowDataBound"
OnRowCommand = "Timeevents_RowCommand"
AutoGenerateColumns="False">
<columns>
<asp:BoundField DataField="CaseID" HeaderText="CaseID" Visible = "False" />
<asp:BoundField DataField="caseworkerID" HeaderText="CwID" Visible = "False" />
<asp:BoundField DataField="EventTypeID" HeaderText="EvTypeID" Visible = "False" />
<asp:BoundField DataField="CaseWorker" HeaderText="Case Worker" />
<asp:BoundField DataField="EventDate" HeaderText="Event Date" />
<asp:BoundField DataField="Code" HeaderText="Code" />
<asp:BoundField DataField="TotalUnits" HeaderText="Total Units" />
<asp:BoundField DataField="EventType" HeaderText="Event Type" />
<asp:BoundField DataField="UnitCost" HeaderText="Unit Cost" />
<asp:BoundField DataField="TotalCost" HeaderText="Total Cost"/>
<asp:TemplateField HeaderText="ADD">
<ItemTemplate>
<asp:Button ID="AddUnit" runat="server" Text=" +1 "
CommandName="AddUnit"
CommandArgument='<%# Eval("CaseID")+ ";" + Eval("CaseworkerID")+ ";" + Eval("EventDate")+ ";" + Eval("EventTypeID")+ ";" + ("1")%>'/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
тогда кажется невозможным получить эти значения в обработчике onRowDatabound, используя (e.Гребите.Клеток[2].Текст)
Я обошел эту проблему, не установив ни одно из полей BoundFields в Visible = " False" таким образом, они видны = "true" по умолчанию. получение необходимых значений в обработчике onRowDatabound в коде, а затем создание их потом не видно . вроде этого.
protected void Timeevents_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{ // just for the datarows
int a = (int.Parse(e.Row.Cells[2].Text));
if (a % 2 == 0)
{
e.Row.BackColor = System.Drawing.Color.Gainsboro;
}
else
{
e.Row.BackColor = System.Drawing.Color.White;
}
}
// end if so this applies to header and data rows
e.Row.Cells[0].Visible = false;
e.Row.Cells[1].Visible = false;
e.Row.Cells[2].Visible = false;
}
будучи довольно зеленым, мне потребовалось много гуглить вокруг многих форумов и отладки, чтобы понять, что обработчик не может видеть скрытые поля базы данных, и я не мог найти ответ о том, как установить rowcolour на основе скрытого поля, поэтому я, хотя id просто опубликовать это для других, чтобы найти
Если какие-либо эксперты знают лучший или альтернативный способ, возможно, они также могут добавить код/комментарии ура!
1 ответов
Я думаю, вы могли бы использовать DataItem
Как пишет здесь
// the underlying data item is a DataRowView object.
DataRowView rowView = (DataRowView)e.Row.DataItem;
// Retrieve the EventTypeID value for the current row.
int a = Convert.ToInt32(rowView["EventTypeID"]);