How to add TemplateField to a gridview in the code behind?

后端 未结 2 1055
北恋
北恋 2021-02-06 08:37

I have a DropDownList which has a list of tables. Under it there is GridView. Based on the table selected from the drop down list box, I will populate the GridView

2条回答
  •  执念已碎
    2021-02-06 08:54

    I have done the same functionality as below with custom paging(using storedProc) for 100+ million records in many tables, update, delete and insert also:

    CREATE PROCEDURE [dbo].[sp_Mk]
        @PageIndex  INT,
        @PageSize INT,
        @tableName nvarchar(255),
        @totalRow INT Output
    AS
    BEGIN 
    DECLARE @sql NVARCHAR(MAX)
    Declare @anotherSql NVARCHAR(1000)
    DECLARE @ParamDefinition NVARCHAR(500)
    
    --DECLARE @totalRow INT
    Set @sql = 'WITH TempResult AS( SELECT *  FROM '+@tableName+'), TempCount AS ( SELECT COUNT(*) AS MaxRows FROM TempResult )
    SELECT * FROM TempResult, TempCount ORDER BY (Select Null)
        OFFSET '+CONVERT(VARCHAR(20),(@PageIndex-1)*@PageSize) +' ROWS FETCH NEXT '+CONVERT(VARCHAR(20),@PageSize)+' ROWS ONLY'
    
    PRINT @SQL
    EXECUTE sp_executesql @SQL
    Set @anotherSql=N'SELECT COUNT(*) as totalRow FROM '+@tableName
    SET @ParamDefinition = N'@totalRowOutPut INT  OUTPUT'
    --PRINT @anotherSql
    Execute sp_executesql @anotherSql, 
    @ParamDefinition, 
    --@tableNameInput=@tableName, 
    @totalRowOutPut=@totalRow OUTPUT
    End
    
    
    
    
    
                

    SqlConnectionStringBuilder builder; int pageSize = 100; protected void Page_Load(object sender, EventArgs e) { builder = new SqlConnectionStringBuilder(connectionString); if (!IsPostBack) { using (SqlConnection connObj = new SqlConnection(connectionString)) { connObj.Open(); using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='" + builder.InitialCatalog + "' AND TABLE_NAME Not In('AspNetUsers') Order By TABLE_NAME", connObj)) { DataSet ds = new DataSet(); adapter.Fill(ds); ddlTableNames.DataSource = ds; ddlTableNames.DataBind(); ddlTableNames.Items.Insert(0, new ListItem("Select Table", String.Empty)); } } } //} //else if(ddlTableNames.Visible) ddlTableNames.Visible = false; } protected void ddlTableNames_SelectedIndexChanged(object sender, EventArgs e) { if (ddlTableNames.SelectedValue != "") { grdDynamic.Visible = true; this.BindGrid(ddlTableNames.SelectedValue, Convert.ToInt32(hdnPageIndex.Value)); } else if (grdDynamic.Visible == true) grdDynamic.Visible = false; } private void BindGrid(string selectedTable, int pageIndex, bool addNewRow=false) { using (SqlConnection connObj = new SqlConnection(connectionString)) { using (SqlCommand cmd = new SqlCommand("sp_Mk", connObj)) { int recordCount=0; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@PageIndex", pageIndex); cmd.Parameters.AddWithValue("@PageSize", pageSize); cmd.Parameters.AddWithValue("@tableName", ddlTableNames.SelectedValue); SqlParameter totalRow = new SqlParameter("@totalRow", SqlDbType.Int, 4); totalRow.Direction = ParameterDirection.Output; cmd.Parameters.Add(totalRow); connObj.Open(); SqlDataAdapter adapter = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); adapter.Fill(ds); grdDynamic.DataSource = ds.Tables[0]; if (addNewRow) ds.Tables[0].Rows.Add(); recordCount = Convert.ToInt32(ds.Tables[1].Rows[0].ItemArray[0]); grdDynamic.DataBind(); connObj.Close(); if (totalRow.Value != DBNull.Value) { } this.PopulatePager(recordCount, pageIndex); } } } private void PopulatePager(int recordCount, int currentPage) { double dblPageCount = (double)((decimal)recordCount / pageSize); int pageCount = (int)Math.Ceiling(dblPageCount); List pages = new List(); if (pageCount > 0) { pages.Add(new ListItem("First", "1", currentPage > 1)); for (int i = 1; i <= pageCount; i++) { ListItem item=new ListItem(i.ToString(), i.ToString(), i != currentPage); if (i == currentPage) item.Attributes.Add("style", "color:red;"); pages.Add(item); } pages.Add(new ListItem("Last", pageCount.ToString(), currentPage < pageCount)); } rptPager.DataSource = pages; rptPager.DataBind(); } protected void Page_Changed(object sender, EventArgs e) { int pageIndex = int.Parse((sender as LinkButton).CommandArgument); hdnPageIndex.Value = pageIndex.ToString(); this.BindGrid(ddlTableNames.SelectedValue, pageIndex); } protected void OnRowEditing_grdDynamic(object sender, GridViewEditEventArgs e) { grdDynamic.EditIndex = e.NewEditIndex; this.BindGrid(ddlTableNames.SelectedValue, Convert.ToInt32(hdnPageIndex.Value)); } protected void OnRowUpdating_grdDynamic(object sender, GridViewUpdateEventArgs e) { GridViewRow row = grdDynamic.Rows[e.RowIndex]; string updateStatement = string.Empty; for (int x = 0; x < row.Cells.Count; x++) updateStatement = updateStatement + grdDynamic.DataKeys[e.RowIndex].Values[x] + " = " + grdDynamic.DataKeys[e.RowIndex].Values[x] + ", "; //int recordId = Convert.ToInt32(grdDynamic.DataKeys[e.RowIndex].Values[0]); using (SqlConnection con = new SqlConnection(connectionString)) { //using (SqlCommand cmd = new SqlCommand("UPDATE "+selectedTable"+ SET Name = @Name, Country = @Country WHERE CustomerId = @CustomerId")) { cmd.Connection = con; con.Open(); cmd.ExecuteNonQuery(); con.Close(); } } grdDynamic.EditIndex = -1; this.BindGrid(ddlTableNames.SelectedValue, Convert.ToInt32(hdnPageIndex.Value)); } protected void OnRowCancelingEdit_grdDynamic(object sender, EventArgs e) { grdDynamic.EditIndex = -1; this.BindGrid(ddlTableNames.SelectedValue, Convert.ToInt32(hdnPageIndex.Value)); } protected void OnRowDeleting_grdDynamic(object sender, GridViewDeleteEventArgs e) { int recordId = Convert.ToInt32(grdDynamic.DataKeys[e.RowIndex].Values[0]); using (SqlConnection con = new SqlConnection(connectionString)) { using (SqlCommand cmd = new SqlCommand("DELETE FROM " + ddlTableNames.SelectedValue + " WHERE RecordId = @recordId")) { cmd.Connection = con; con.Open(); cmd.ExecuteNonQuery(); con.Close(); } } this.BindGrid(ddlTableNames.SelectedValue, Convert.ToInt32(hdnPageIndex.Value)); } protected void btnGo_Click(object sender, EventArgs e) { int myInt; if(txtPageSize.Text!=null && txtPageSize.Text !=string.Empty) if(int.TryParse(txtPageSize.Text, out myInt)) pageSize = myInt; hdnPageIndex.Value = "1"; this.BindGrid(ddlTableNames.SelectedValue, 1); } protected void AddNewButton_Click(object sender, EventArgs e) { hdnPageIndex.Value="1"; this.BindGrid(ddlTableNames.SelectedValue, Convert.ToInt32(hdnPageIndex.Value), true); } protected void OnRowDataBound_grdDynamic(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow && e.Row.RowIndex != grdDynamic.EditIndex) { (e.Row.Cells[0].Controls[2] as LinkButton).Attributes["onclick"] = "return confirm('Do you want to delete this row?');"; } }

    Hope it helps:

提交回复
热议问题