为什么不直接从数据源中提取数据.
DataBinder.Eval(e.Row.DataItem, "ColumnName")
Chris.. 23
当您使用TemplateField并将文字文本绑定到它时,asp.net实际上会为您插入一个控件!它被放入DataBoundLiteralControl中.如果您在获取空文本的代码行附近查看调试器,则可以看到此信息.
因此,要在不更改模板的情况下访问信息以使用控件,您可以这样投射:
string percentage = ((DataBoundLiteralControl)e.Row.Cells[7].Controls[0]).Text;
那会得到你的文字!
为什么不直接从数据源中提取数据.
DataBinder.Eval(e.Row.DataItem, "ColumnName")
当您使用TemplateField并将文字文本绑定到它时,asp.net实际上会为您插入一个控件!它被放入DataBoundLiteralControl中.如果您在获取空文本的代码行附近查看调试器,则可以看到此信息.
因此,要在不更改模板的情况下访问信息以使用控件,您可以这样投射:
string percentage = ((DataBoundLiteralControl)e.Row.Cells[7].Controls[0]).Text;
那会得到你的文字!
以上是很好的建议,但您可以在网格视图中获取单元格的文本值,而无需将其包装在文字或标签控件中.你只需要知道要连接的事件.在这种情况下,请改用DataBound事件,如下所示:
protected void GridView1_DataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { if (e.Row.Cells[0].Text.Contains("sometext")) { e.Row.Cells[0].Font.Bold = true; } } }
运行调试器时,您将看到此方法中出现的文本.
首先,您需要将代码包装在一个Label
或一个Literal
控件中,以便您可以正确引用它.发生的事情是系统没有办法跟踪它,因为没有与文本相关的控制.控件的责任是将其内容添加到viewstate.
你需要使用gridView.FindControl("controlName"); 获得行中的控件.从那里你可以得到它的属性,包括Text
.
您还可以获取相关行的DataItem属性并将其转换为适当的类型并直接提取信息.
只需使用循环来检查gridview中的单元格,例如:
for (int i = 0; i < GridView2.Rows.Count; i++) { string vr; vr = GridView2.Rows[i].Cells[4].Text; // here you go vr = the value of the cel if (vr == "0") // you can check for anything { GridView2.Rows[i].Cells[4].Text = "Done"; // you can format this cell } }