2016-08-07 38 views
1

Ich habe gridview die itemtemplate enthalten und innerhalb itemtemplate enthält label. Ich möchte text in label platzieren, die Werte stammen von codebehind. Ich möchte diese Art von output in gridview. IMGWie übergibt man dynamisch Werte an Gridview-Zeilen mit Label?

Proj_Title und Total_Issue arbeitet gut, aber wie label Text gegen jede Zeile zu setzen. Hier ist meine aspx-Code:

<asp:GridView ID="g9" runat="server" OnRowDataBound="g9_RowDataBound" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None"> 
<AlternatingRowStyle BackColor="White" /> 
<Columns> 
<asp:TemplateField HeaderText="Project_Title"> 
<ItemTemplate> 
<asp:Label runat="server" Text='<%#Eval("proj_title") %>'></asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Total Issue"> 
<ItemTemplate> 
<asp:Label ID="Label1" runat="server" Text='<%#Eval("Count") %>'></asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="RESULT"> 
<ItemTemplate> 
<asp:Label ID="issue" runat="server" ForeColor="Blue" Font-Size="Large" Width="200px" ></asp:Label> 
<asp:Label ID="issue2" runat="server" ForeColor="Blue" Font-Size="Large" Width="200px" ></asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 
    </Columns> 
</asp:GridView> 

aspx.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
SqlCommand cmd3 = new SqlCommand("USE SKDM SELECT proj_title , COUNT (*) as Count FROM Issue WHERE proj_title is NOT null GROUP BY proj_title", cnn); 
SqlDataAdapter adp = new SqlDataAdapter(cmd3); 
DataSet ds = new DataSet(); 
adp.Fill(ds); 
cnn.Open(); 
cmd3.ExecuteNonQuery(); 
cnn.Close(); 
g9.DataSource = ds; 
g9.DataBind(); 
} 
protected void g9_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
SqlCommand cmd3 = new SqlCommand("USE SKDM SELECT proj_title , COUNT (*) as Count FROM Issue WHERE proj_title is NOT null GROUP BY proj_title", cnn); 
cnn.Open(); 
SqlDataReader dr = cmd3.ExecuteReader(); 
int[] arr = new int[2]; 
while (dr.Read()) 
{ 
arr[0] = dr.GetInt32(1); 
} 
if (arr[0] == 2) 
{ 
Label l3 = (Label)e.Row.FindControl("issue2"); 
string s = "BAD"; 
l3.Text = s; 
} 
dr.Close(); 
cnn.Close(); 
if (arr[0] == 2) 
{ 
    Label l2 = (Label)e.Row.FindControl("issue"); 
    string s = "GOOD"; 
    l2.Text = s; 
    } 
    if (arr[1] == 5) 
    { 
    Label ab = (Label)e.Row.FindControl("issue2"); 
     ab.Text = "Poor"; 
} 
} 
} 

ich will, wenn count Wert 2 dann führt Good in Result Spalte gegen Zeile angezeigt werden und wenn count Wert 5 dann führen wird Poor sein und das Etikett Result Spalte .Thanks

+0

Warum nicht Sie Datentabelle binden an Pageload zu Gridview? – Developer

+0

, weil ich Werte in 'Gridview' auf der Seite laden will.Sie schlagen mir bitte –

+0

Aber Sie binden Gridview auf Seite laden dann was Sie wollen. Ich glaube, Sie haben die Datenbindung in der Gridview verwechselt. – Developer

Antwort

0

Einfach können Sie eine Funktion aufrufen Ihr Raster von Code hinten zu Designseite.

<asp:GridView ID="g9" runat="server" OnRowDataBound="g9_RowDataBound" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None"> 
     <AlternatingRowStyle BackColor="White" /> 
     <Columns> 
      <asp:TemplateField HeaderText="Project_Title"> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%#Eval("proj_title") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Total Issue"> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%#Eval("Count") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="RESULT"> 
       <ItemTemplate> 
        <%#ConvertResult(Convert.ToString(Eval("Count")))%> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

.CS Seite

protected void Page_Load(object sender, EventArgs e) 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)), 
         new DataColumn("proj_title", typeof(string)), 
         new DataColumn("Count",typeof(int))}); 
     dt.Rows.Add(1, "SQl", 2); 
     dt.Rows.Add(2, "C#", 5); 
     g9.DataSource = dt; 
     g9.DataBind(); 
    } 

    protected void g9_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      // i dont use this... 
     } 
    } 

    // Create this function and call this to in your gridview 
    // see above in design page 
    public string ConvertResult(string strCount) 
    { 
     string strResult = ""; 
     int iValue = Convert.ToInt32(strCount); 
     if (iValue < 2) 
      strResult = "Bad"; 
     if (iValue == 2) 
      strResult = "Poor"; 
     if (iValue == 5) 
      strResult = "great"; 
     return strResult; 
    } 

Output Ergebnis
enter image description here

+0

Sie können Ihre If-Bedingung nach Ihrer Anforderung ändern .... –