如何在自动生成的GridView

时间:2016-12-09 09:20:51

标签: c# asp.net gridview

如何在GridView点击事件中自动生成Button中获取标题名称。标题列不能相同......所有时间......

因此,根据列标题,我们必须进一步处理。请帮助找到列标题。

我们通过以下代码找到rowindex

var rowIndex = ((GridViewRow)((Control)sender).NamingContainer).RowIndex;
像这样。那么如何在GridView内单击链接按钮时找到GridView的列索引?

'

string dt1 = txtFromDate.Text;
     string d1, d5 = "", d3 = "", d4 = "", date, d6, service_Date;
    if (dt1 != "")
    {
        d1 = dt1;
        if (d1.Contains("."))
        {
            string[] word = d1.Split('.');
            d5 = word[0];
            d3 = word[1];
            d4 = word[2];
        }
        else if (d1.Contains("-"))
        {
            string[] word = d1.Split('-');
            d5 = word[0];
            d3 = word[1];
            d4 = word[2];
        }
        else if (d1.Contains("/"))
        {
            string[] word = d1.Split('/');
            d5 = word[0];
            d3 = word[1];
            d4 = word[2];
        }

        date = d4 + "/" + d3 + "/" + d5;
        service_Date = d5 + "-" + d3 + "-" + d4;
    }
    else
    {
        date = "";
        service_Date = "";
    }

    string dt2 = txtToDate.Text;
    string t1, t5 = "", t3 = "", t4 = "", d2, t6, serv;
    if (dt1 != "")
    {
        t1 = dt2;
        if (t1.Contains("."))
        {
            string[] word = t1.Split('.');
            t5 = word[0];
            t3 = word[1];
            t4 = word[2];
        }
        else if (t1.Contains("-"))
        {
            string[] word = t1.Split('-');
            t5 = word[0];
            t3 = word[1];
            t4 = word[2];
        }
        else if (t1.Contains("/"))
        {
            string[] word = t1.Split('/');
            t5 = word[0];
            t3 = word[1];
            t4 = word[2];
        }


        d2 = t4 + "/" + t3 + "/" + t5;
        serv = t5 + "-" + t3 + "-" + t4;
        //d5 = d3 + "/" + d6 + "/" + d4 ;
    }
    else
    {
        d2 = "";
        serv = "";
    }
    dttest.Columns.Add("MACHINENAME_DATE");
    ArrayList Array_machine = new ArrayList();
    using (con = new SqlConnection(con_str))
    {
        con.Open();
        string qry;

        qry = "select distinct mname from tb_reqmach  where fromdate>='" + date + "' and todate<='" + d2 + "' and mcfact='" + drpfact.Text + "' group by mname  ";
        cmd = new SqlCommand(qry, con);
        dr = cmd.ExecuteReader();

        while (dr.Read())
        {
            Array_machine.Add(dr["mname"].ToString().Trim());
            //dttest.Rows.Add();
            dttest.Rows.Add(dr["mname"].ToString().Trim());
        }

        con.Close();
    }

    ArrayList Array_L = new ArrayList();
    DateTime startDate = Convert.ToDateTime(date);
    Array_L.Add(startDate.ToString("MM-dd-yyyy"));
    dttest.Columns.Add(startDate.ToShortDateString());
    DateTime endDate = Convert.ToDateTime(d2);
    while (startDate < endDate)
    {

        startDate = startDate.AddDays(1);
        Array_L.Add(startDate.ToString("MM-dd-yyyy"));
        dttest.Columns.Add(startDate.ToShortDateString());
    }


    DataTable dt = new DataTable();
    int m = 0;

    for (int j = 0; j < Array_L.Count; j++)
    {
        int avail = 0;
        int planned = 0;
        int req = 0;

        for (int d = 0; d < Array_machine.Count; d++)
        {
            //dttest.Columns.Add();
            //  dttest.Columns.Add();
            //  xlworksheet.Cells[4 + d, 1] = Array_machine[d];
            // dttest.Rows.Add();
            string machine_name = Array_machine[d].ToString();
            string Date = Array_L[j].ToString();
            // xlworksheet.Cells[3, m + 2] = Date;



            //DataColumn[] keyColumns = new DataColumn[1];
            //keyColumns[0] = dttest.Columns["MACHINENAME/DATE"];
            //dttest.PrimaryKey = keyColumns;
            //if (dttest.Rows.Contains(machine_name))
            //{
            //}
            //else
            //{
            //dttest.Rows.Add(machine_name);
            //}
            //   dttest.Rows[d][1] = Array_machine[d];

            // [xlworksheet].Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
            //    xlworksheet.Range["A3", m + 2].Interior.Color = System.Drawing.ColorTranslator.FromHtml("#99CCFF");
            //  dt.Columns.Add(machine_name);
            using (con = new SqlConnection(con_str))
            {

                con.Open();
                string qry1;

                //qry = "select distinct mname from tb_reqmach where mcfact='" + drpfact.Text + "' group by mname ";
                qry1 = "select count(mcdesp) as mcdesp from machine where mcdesp='" + Array_machine[d].ToString().Trim() + "' and mcfact='" + drpfact.Text + "' ";
                cmd = new SqlCommand(qry1, con);
                dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    // xlworksheet.Cells[dtcount + 1, m + 7] = dr["mcdesp"].ToString().Trim();
                    avail = Convert.ToInt32(dr["mcdesp"].ToString().Trim());
                }
                con.Close();
                con.Open();
                string qry;

                qry = "SELECT sum(rmachine) as mname FROM tb_reqmach WHERE '" + Array_L[j].ToString() + "' BETWEEN fromdate AND todate and mname='" + Array_machine[d].ToString().Trim() + "' and mcfact='" + drpfact.Text + "'";
                cmd = new SqlCommand(qry, con);
                dr = cmd.ExecuteReader();

                if (dr.Read())
                {
                    //  dttest.Rows.Add();
                    //xlworksheet.Columns[i].ColumnWidth = 18;
                    //  xlworksheet.Cells[d + 4, 2 + m] = dr["mname"].ToString().Trim();
                    dttest.Rows[d][j + 1] = dr["mname"].ToString().Trim();
                    if (dr["mname"].ToString().Trim() != "")
                    {
                        planned = Convert.ToInt32(dr["mname"].ToString().Trim());
                        req = avail - planned;
                        int rows = d + 4;
                        int cols = 2 + m;
                        // string rowA = FindResA(rows);
                        // string colB = FindResB(cols);
                        if (req < 0)
                        {
                            // xlworksheet.Range[colB + rows, colB + rows].Interior.Color = System.Drawing.ColorTranslator.FromHtml("#ff0000");
                        }
                        else
                        {
                            //  xlworksheet.Range[colB + rows, colB + rows].Interior.Color = System.Drawing.ColorTranslator.FromHtml("#008000");
                        }
                    }

                    //  dttest.Rows[d][m+1] = dr["mname"].ToString().Trim();
                    // xlworksheet.Columns.AutoFit();
                    // gvtest.HeaderRow.Cells(d).Text = dr["mname"].ToString().Trim();
                    //dt.Rows.Add();
                    // dt.Rows[d][machine_name] = dr["mname"].ToString().Trim();
                }

                con.Close();

            }

        }
        m++;
        //    gvtest.DataSource = dt;
        //  gvtest.DataBind();
        //ID = (i + 1).ToString();
        //  string machine_name = Array_machine[j].ToString();
        // xlworksheet.Cells[4 + i, 1] = ID;
        //  xlworksheet.Cells[4 + i, 2] = machine_name;
        // xlworksheet.Cells[3, m + 2] = machine_name;
        // 
    }

    Session["dttest"] = dttest;
    GridView4.DataSource = dttest;
    GridView4.DataBind();






    for (int j = 0; j < Array_L.Count; j++)
    {
        int avail = 0;
        int planned = 0;
        int req = 0;

        for (int d = 0; d < Array_machine.Count; d++)
        {
            //dttest.Columns.Add();
            //  dttest.Columns.Add();
            //  xlworksheet.Cells[4 + d, 1] = Array_machine[d];
            // dttest.Rows.Add();
            string machine_name = Array_machine[d].ToString();
            string Date = Array_L[j].ToString();
            // xlworksheet.Cells[3, m + 2] = Date;



            //DataColumn[] keyColumns = new DataColumn[1];
            //keyColumns[0] = dttest.Columns["MACHINENAME/DATE"];
            //dttest.PrimaryKey = keyColumns;
            //if (dttest.Rows.Contains(machine_name))
            //{
            //}
            //else
            //{
            //dttest.Rows.Add(machine_name);
            //}
            //   dttest.Rows[d][1] = Array_machine[d];

            // [xlworksheet].Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
            //    xlworksheet.Range["A3", m + 2].Interior.Color = System.Drawing.ColorTranslator.FromHtml("#99CCFF");
            //  dt.Columns.Add(machine_name);
            using (con = new SqlConnection(con_str))
            {

                con.Open();
                string qry1;

                //qry = "select distinct mname from tb_reqmach where mcfact='" + drpfact.Text + "' group by mname ";
                qry1 = "select count(mcdesp) as mcdesp from machine where mcdesp='" + Array_machine[d].ToString().Trim() + "' and mcfact='" + drpfact.Text + "' ";
                cmd = new SqlCommand(qry1, con);
                dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    // xlworksheet.Cells[dtcount + 1, m + 7] = dr["mcdesp"].ToString().Trim();
                    avail = Convert.ToInt32(dr["mcdesp"].ToString().Trim());
                }
                con.Close();
                con.Open();
                string qry;

                qry = "SELECT sum(rmachine) as mname FROM tb_reqmach WHERE '" + Array_L[j].ToString() + "' BETWEEN fromdate AND todate and mname='" + Array_machine[d].ToString().Trim() + "' and mcfact='" + drpfact.Text + "'";
                cmd = new SqlCommand(qry, con);
                dr = cmd.ExecuteReader();

                if (dr.Read())
                {
                    //  dttest.Rows.Add();
                    //xlworksheet.Columns[i].ColumnWidth = 18;
                    //  xlworksheet.Cells[d + 4, 2 + m] = dr["mname"].ToString().Trim();
                    // dttest.Rows[d][j + 1] = dr["mname"].ToString().Trim();
                    if (dr["mname"].ToString().Trim() != "")
                    {
                        planned = Convert.ToInt32(dr["mname"].ToString().Trim());
                        req = avail - planned;
                        int rows = d + 4;
                        int cols = 2 + m;
                        // string rowA = FindResA(rows);
                        // string colB = FindResB(cols);
                        if (req < 0)
                        {
                            GridView4.Rows[d].Cells[j + 1].BackColor = Color.Red;
                        }
                        else
                        {

                        }
                    }

                }

                con.Close();

            }

        }
        m++;

    }


    foreach (GridViewRow gr in GridView4.Rows)
    {
        // LinkButton hp = new LinkButton();
        for (int k = 1; k < dttest.Columns.Count; k++)
        {
            LinkButton hp = new LinkButton();
            if (gr.Cells[k].Text != "")
            {
                hp.Text = gr.Cells[k].Text;
                //defsur_Click(sender, e);
                //GridViewRow gvr = e.Row;
                //var rowIndex = ((GridViewRow)((Control)sender).NamingContainer).RowIndex;
                //Label username = (Label)GridView3.Rows[rowIndex].FindControl("machinename");
                //mcname = username.Text;
                // hp.Attributes.Add("onclick", "Gridview4_linkclick");
                hp.Click += new EventHandler(Gridview4_linkclick);
                // hp.NavigateUrl = "~/Default.aspx?name=" + hp.Text;
                gr.Cells[k].Controls.Add(hp);
            }
        }

    }
    GridView4.Columns[0].Visible = false;'

1 个答案:

答案 0 :(得分:0)

您可以使用此代码段。它循环所单击按钮所在行中的所有单元格并尝试查找正确的列。

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    //get the control that fired the method
    Control control = e.CommandSource as Control;

    //get the row containing the control
    GridViewRow gvr = control.NamingContainer as GridViewRow;

    //get the row number
    int rowNumber = gvr.RowIndex;

    //declare the column variable
    int columnNumber = -1;

    //loop all the columns in the gridview
    for (int i = 0; i < GridView1.Columns.Count; i++)
    {
        //try to find the button that was clicked in each individual cell
        Button button = GridView1.Rows[rowNumber].Cells[i].FindControl(control.ID) as Button;

        //if the button is found set the column number
        if (button != null)
        {
            columnNumber = i;
        }
    }

    //get the column name
    Label1.Text = GridView1.HeaderRow.Cells[columnNumber].Text;
}

GridView示例

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" OnRowCommand="GridView1_RowCommand">
    <Columns>
        <asp:TemplateField HeaderText="Header 1">
            <ItemTemplate>
                <asp:Button ID="Button1" runat="server" Text="Button" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>