webentwicklung-frage-antwort-db.com.de

Wie erhalte ich Werte aus Vorlagenfeldern in GridView?

Dies ist mein Markup von 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>

Ich habe eine Schaltfläche, die die Werte in den Arbeitsblattzellen des Excel-Objekts speichert.

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

Wie erhalte ich die Werte von GridView und speichere sie als GridView2.Rows[i].Cells[j] in einem Arbeitsblatt. Text gibt eine leere Zeichenfolge zurück.

7
Sandeep

Ihnen fehlt ein Typ-Cast. Mach es so-

Label name = (Label)GridView2.Rows[i].Cells[j].FindControl("lblname");
xlWorkSheet.Cells[i + 1, j + 1] = name.Text;

Update- Wenn du deine Labels als Label0 und Label1 benennen kannst, dann in der zweiten für

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

Für Header-Text string hText = GridView2.HeaderRow.Cells[your column number].Text;

9
Cdeez

Um Werte abzurufen, gehen Sie folgendermaßen vor: 

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
}
3
sajanyamaha

{cell}.Text funktioniert nur, wenn sich innerhalb der TemplateField kein Steuerelement befindet. Sie haben Ihrer Vorlage ein Label hinzugefügt. Aus diesem Grund müssen Sie zunächst das Steuerelement suchen, Ihr Objekt in das Steuerelement umwandeln und nach Bedarf auf die Eigenschaften des Steuerelements zugreifen.

Wenn Sie einen allgemeineren Ansatz wünschen, können Sie immer Folgendes tun (entfernen Sie das Label-Steuerelement und fügen Sie einfach das bewertete Feld hinzu): 

<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>

Wenn Sie den ursprünglich verwendeten Code verwenden, sollte der {cell}.Text nicht mehr leer sein.

1
cbillowes

Versuchen Sie es mit diesem Code, ich hatte ein ähnliches Problem. Ich denke, dieser Code ist dynamischer und Sie müssen nicht jedes Mal den Namen des Labels finden. Aber um die Übereinstimmung zwischen den Steuerelementen Und dem Index Steuerelemente [] zu erhalten:

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;
            }
1
Nitzan Malichi
 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;
            }
        }
     }
0
Ayaat Shifa