Как добиться массового сохранения в Gridview с использованием ASP.NET с C # - PullRequest
0 голосов
/ 11 мая 2018

У меня есть Gridview, который заполняется несколькими строками следующим образом, где пользователю разрешено редактировать альтернативные имена для просматриваемых строк после того, как он может массово сохранить отредактированные столбцы.

enter image description here

Я пытался добиться этого с помощью Редактировать шаблон, но мне не удалось этого сделать, потому что, когда пользователь пытается редактировать следующую строку немедленно, содержимое предыдущего «отредактированного» столбца стирается обратно в исходное.

Как я могу добиться этого с помощью gridview

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Используйте это и отредактируйте. По вашему мнению, это отлично работает для меня.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js" type="text/javascript"></script>
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="Stylesheet" type="text/css" />
    <script type="text/javascript">
        $(function () {

            $("[id$=txtRecievedDate]").datepicker({
                showOn: 'button',
                buttonImageOnly: true,
                dateFormat: "yy-mm-dd",
                buttonImage: 'http://jqueryui.com/demos/datepicker/images/calendar.gif'

            });
        });
     </script>
    <style type = "text/css">
    input[type=text], select{background-color:#FFFFD2; border:1px solid #ccc}
    </style>
</head>
<body style = "font-family:Arial;font-size:10pt">
    <form id="form1" runat="server">
<asp:GridView ID="gvCustomers" runat="server" AutoGenerateColumns="false"  
        DataKeyNames = "id" onrowdatabound="gvCustomers_RowDataBound">
    <Columns>
        <asp:TemplateField>
            <HeaderTemplate>
            <asp:Label ID="Label1" runat="server" Text="SelectEdit"></asp:Label>
                <asp:CheckBox ID = "chkAll" runat="server" AutoPostBack="true" OnCheckedChanged="OnCheckedChanged" />
            </HeaderTemplate>
            <ItemTemplate>
                <asp:CheckBox runat="server" AutoPostBack="true" OnCheckedChanged="OnCheckedChanged" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="ID" ItemStyle-Width = "150">
            <ItemTemplate>
                <asp:Label ID="lblId" runat="server" Text='<%# Eval("id") %>'></asp:Label>
                <asp:TextBox ID="txtID" runat="server" Text='<%# Eval("id") %>' ReadOnly="true" Visible="false"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Cartridge Set No" ItemStyle-Width = "150">
            <ItemTemplate>
                <asp:Label ID="lblCartridgeSetNo" runat="server" Text='<%# Eval("CartridgeSetNo") %>'></asp:Label>
                <asp:TextBox ID="txtCartridgeSetNo" runat="server" Text='<%# Eval("CartridgeSetNo") %>' ReadOnly="true" Visible="false"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Status" ItemStyle-Width = "150">
            <ItemTemplate>
                <asp:Label ID = "lblcurrentstatus" runat="server" Text='<%# Eval("currentstatus") %>'></asp:Label>
                <asp:Label ID = "lblstatus" runat="server" Text='<%# Eval("status") %>' Visible = "false"></asp:Label>
                <asp:DropDownList ID="ddlstatus" runat="server" Visible = "false">

                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
                <asp:TemplateField HeaderText="date Recieved" ItemStyle-Width = "150">
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server" Text='<%# Eval("dateRecieved") %>'></asp:Label>
                <asp:TextBox ID="txtRecievedDate" runat="server" Text='<%# Eval("dateRecieved") %>' Visible="false"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Comments" ItemStyle-Width = "150">
            <ItemTemplate>
                <asp:Label ID="lblComments" runat="server" Text='<%# Eval("comments") %>'></asp:Label>
                <asp:TextBox ID="txtComments" runat="server" Text='<%# Eval("comments") %>'  Visible="false"></asp:TextBox>

            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<br />
<asp:Button ID="btnUpdate" runat="server" Text="Update" OnClick = "Update" Visible = "false"/>
    </form>
</body>
</html>

CS файл

 using System;
using System.Web.UI.WebControls;
using System.Data;
using System.Linq;
using System.Configuration;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.BindGrid();
        }
    }
    private void BindGrid()
    {
        SqlCommand cmd = new SqlCommand("SELECT   [Id],[CartridgeSetNo],[status] ,[dateRecieved],[Comments] ,case when status = 1 then 'Received but not usable' when status = 0 then 'Received and Usable' else 'Not Received' end as currentstatus FROM DrugAllocate ");
        gvCustomers.DataSource = this.ExecuteQuery(cmd, "SELECT");
        gvCustomers.DataBind();
    }
    private DataTable ExecuteQuery(SqlCommand cmd, string action)
    {
        string conString = ConfigurationManager.ConnectionStrings["constring"].ConnectionString;
        using (SqlConnection con = new SqlConnection(conString))
        {
            cmd.Connection = con;
            switch (action)
            {
                case "SELECT":
                    using (SqlDataAdapter sda = new SqlDataAdapter())
                    {
                        sda.SelectCommand = cmd;
                        using (DataTable dt = new DataTable())
                        {
                            sda.Fill(dt);
                            return dt;
                        }
                    }
                case "UPDATE":
                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                    break;
            }
            return null;
        }
    }

    protected void Update(object sender, EventArgs e)
    {
        foreach (GridViewRow row in gvCustomers.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                bool isChecked = row.Cells[0].Controls.OfType<CheckBox>().FirstOrDefault().Checked;
                if (isChecked)
                {
                    SqlCommand cmd = new SqlCommand("UPDATE DrugReceipt SET Comments=@Comments,  dateRecieved=@dateRecieved , status = @status where Id = @Id");
                    cmd.Parameters.AddWithValue("@Comments", row.Cells[5].Controls.OfType<TextBox>().FirstOrDefault().Text);

                    string status = row.Cells[3].Controls.OfType<DropDownList>().FirstOrDefault().SelectedItem.Value;
                    if (status == "Received and Usable")
                    {
                        status="0";
                    }
                    if (status == "Received but not usable")
                    {
                       string comments=row.Cells[5].Controls.OfType<TextBox>().FirstOrDefault().Text;
                        status = "1";
                        if (comments == "")
                        {
                            ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('comment is mendatry');", true);
                            break;
                        }
                    }
                    if (status == "Not Received")
                    {
                        status = "2";
                    }
                    cmd.Parameters.AddWithValue("@status", status);
                    cmd.Parameters.AddWithValue("@dateRecieved", row.Cells[4].Controls.OfType<TextBox>().FirstOrDefault().Text);
                    cmd.Parameters.AddWithValue("@Id", gvCustomers.DataKeys[row.RowIndex].Value);
                    this.ExecuteQuery(cmd, "UPDATE");
                }
            }
        }
        btnUpdate.Visible = false;
        this.BindGrid();
    }
    public DataSet GetYesNoValue(string ColumnName)
    {
        DataTable dtVal = new DataTable();
        DataColumn column;


        column = new DataColumn();
        column.DataType = System.Type.GetType("System.String");
        column.ColumnName = ColumnName;
        dtVal.Columns.Add(column);

        DataSet dsVal = new DataSet();

        dtVal.Rows.Add("Received and Usable");
        dtVal.Rows.Add("Received but not usable");
        dtVal.Rows.Add("Not Received");

        dsVal.Tables.Add(dtVal);

        return dsVal;
    }
    protected void OnCheckedChanged(object sender, EventArgs e)
    {
        bool isUpdateVisible = false;
        CheckBox chk = (sender as CheckBox);
        if (chk.ID == "chkAll")
        {
            foreach (GridViewRow row in gvCustomers.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    row.Cells[0].Controls.OfType<CheckBox>().FirstOrDefault().Checked = chk.Checked;
                }
            }
        }
        CheckBox chkAll = (gvCustomers.HeaderRow.FindControl("chkAll") as CheckBox);
        chkAll.Checked = true;
        foreach (GridViewRow row in gvCustomers.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {


                bool isChecked = row.Cells[0].Controls.OfType<CheckBox>().FirstOrDefault().Checked;
                for (int i = 1; i < row.Cells.Count; i++)
                {


                    row.Cells[i].Controls.OfType<Label>().FirstOrDefault().Visible = !isChecked;
                    if (row.Cells[i].Controls.OfType<TextBox>().ToList().Count > 0)
                    {
                        row.Cells[i].Controls.OfType<TextBox>().FirstOrDefault().Visible = isChecked;
                    }
                    if (row.Cells[i].Controls.OfType<DropDownList>().ToList().Count > 0)
                    {
                        row.Cells[i].Controls.OfType<DropDownList>().FirstOrDefault().Visible = isChecked;
                    }
                    if (isChecked && !isUpdateVisible)
                    {
                        isUpdateVisible = true;
                    }
                    if (!isChecked )
                    {
                        chkAll.Checked = false;
                    }

                }
            }
        }
        btnUpdate.Visible = isUpdateVisible;
    }
    protected void gvCustomers_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            SqlCommand cmd = new SqlCommand("SELECT status,  case when status = 1 then 'Received but not usable' when status = 0 then 'Received and Usable' else 'Not Received' end as statuscurrent FROM DrugAllocate");
            DropDownList ddlstatus = (e.Row.FindControl("ddlstatus") as DropDownList);
            ddlstatus.DataSource = this.ExecuteQuery(cmd, "SELECT");
            string country = (e.Row.FindControl("lblstatus") as Label).Text;
            DataSet ds = new DataSet();
            ds = GetYesNoValue("suppStatus");
            DataTable dt = new DataTable();
            dt = ds.Tables[0];
            ddlstatus.DataSource = dt;
            ddlstatus.DataTextField = "suppStatus";
            ddlstatus.DataValueField = "suppStatus";
            ddlstatus.DataBind();
            try
            {
                ddlstatus.Items.FindByValue(country).Selected = true;
            }
            catch { }

        }
    }
}
0 голосов
/ 11 мая 2018

При изменении действия GridView ваши изменения происходят только в вашем браузере (на стороне клиента), пока вы не сохраните изменение текущей строки.Вам нужно сохранить строку и обновить GridView, чтобы начать редактирование следующей строки.

Типичная реализация состоит в том, чтобы поместить две кнопки в шаблон редактирования - кнопку «Отмена» и «Сохранить» для подтверждения изменения отредактированной строки.При нажатии на кнопку сохранения, ваше событие обратной передачи будет снято с кода на стороне сервера (с аргументом события e, содержащим, какая строка была при редактировании, и данными строки, которые вы обновили).Вы сохраняете данные в базу данных и обновляете GridView.В этот момент вы должны увидеть GridView с обновленным содержимым.Вы готовы нажать кнопку «Изменить» в следующем ряду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...