这是我的GridView标记。
<Columns>
<asp:TemplateField HeaderText="Customer Name">
<ItemTemplate>
<asp:Label ID="lblname" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Customer.Name")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="PickUpPoint">
<ItemTemplate>
<asp:Label ID="lblPickUpPoint" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Pickuppoint")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
我有一个按钮,用于将值存储在excel对象的工作表单元格中。
for (int i = 0; i < GridView2.Rows.Count; i++)
{
for (int j = 0; j < GridView2.Rows[i].Cells.Count; j++)
{
xlWorkSheet.Cells[i + 1, j + 1] = GridView2.Rows[i].Cells[j].Text;
}
}
如何获取GridView的值并将其存储在工作表中,如GridView2.Rows[i].Cells[j]
。Text返回空字符串。
答案 0 :(得分:9)
您缺少类型广告。这样做 -
Label name = (Label)GridView2.Rows[i].Cells[j].FindControl("lblname");
xlWorkSheet.Cells[i + 1, j + 1] = name.Text;
更新 - 如果您可以将标签命名为Label0和Label1,那么在第二个for循环中 -
for (int j = 0; j < GridView2.Rows[i].Cells.Count; j++)
{
Label xyz = (Label)GridView2.Rows[i].Cells[j].FindControl("Label"+j);
xlWorkSheet.Cells[i + 1, j + 1] = xyz.Text;
}
对于标题文字 - string hText = GridView2.HeaderRow.Cells[your column number].Text;
答案 1 :(得分:3)
要检索值,请执行以下操作:
for (int i = 0; i < GridView2.Rows.Count; i++)
{
//extract the TextBox values
Label lblname= (Label)GridView2.Rows[i].Cells[0].FindControl("lblname");
Label lblPickUpPoint= (Label)GridView2.Rows[i].Cells[0].FindControl("lblPickUpPoint");
//Do your excel binding here
}
答案 2 :(得分:1)
{cell}.Text
仅在TemplateField
内没有控件时才有效。您已经为模板添加了标签,这就是您首先需要找到控件,将对象转换为控件并根据需要访问控件属性的原因。
如果您想要更通用的方法,您可以随时执行以下操作(删除标签控件并简单地添加评估字段):
<Columns>
<asp:TemplateField HeaderText="Customer Name">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Customer.Name")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="PickUpPoint">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Pickuppoint")%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
当您使用最初使用的代码时,{cell}.Text
不应再返回空白。
答案 3 :(得分:1)
尝试使用此代码,我遇到了类似的问题。我认为这段代码更具动态性,您不必每次都找到标签的名称。 但要保持控件之间的对应关系 并且索引控制[]:
for (int row = 1; row <= totalRows; row++)
{
for (int col = 0; col < totalCols; col++)
{
if (GridView1.Columns[col].Visible)
{
if (String.IsNullOrEmpty(GridView1.Rows[row - 1].Cells[col].Text))
{
if (GridView1.Rows[row - 1].Cells[col].Controls[1].GetType().ToString().Contains("Label"))
{
Label LB = (Label)GridView1.Rows[row - 1].Cells[col].Controls[1];
workSheet.Cells[row + 1, col + 1].Value = LB.Text;
}
else if (GridView1.Rows[row - 1].Cells[col].Controls[1].GetType().ToString().Contains("LinkButton"))
{
LinkButton LB = (LinkButton)GridView1.Rows[row - 1].Cells[col].Controls[1];
workSheet.Cells[row + 1, col + 1].Value = LB.Text;
}
}
else
{
workSheet.Cells[row + 1, col + 1].Value = GridView1.Rows[row - 1].Cells[col].Text;
}
答案 4 :(得分:0)
protected void Button1_Click(object sender, EventArgs e)
{
int i = 0;
for (i = 0; i <= GvSchedule.Rows.Count - 1; i++)
{
if (((CheckBox)GvSchedule.Rows[i].FindControl("ChkIsService")).Checked)
{
string catName = ((Label)GvSchedule.Rows[i].FindControl("lblCatName")).Text;
var subCatName = ((Label)GvSchedule.Rows[i].FindControl("lblSubCatName")).Text;
}
}
}