При загрузке страницы, Показать флажок отмечен или не отмечен - PullRequest
0 голосов
/ 11 июля 2011

У меня есть столбец в виде сетки флажков. Я хочу иметь возможность отображать эти флажки, которые должны быть либо отмечены, либо не отмечены в соответствии с соответствующим значением в базе данных (в настоящее время этот столбец не привязан ни к какому полю, у меня возникают проблемы с этим). Что-то, что доставляло мне проблемы, это то, что я использую Ajax. когда я делаю AutoPostBack = true, флажок появляется проверенным только на мгновение, а затем, когда он обновляет все, проверка исчезает. Любая помощь будет оценена.

.cs

public partial class vieworders : System.Web.UI.Page
{
    private string orderByString;
    private string fieldString;
    private string address;
    private DataGrid dataGrid = new DataGrid();


    protected void Page_Load(object sender, EventArgs e)
    {

         orderByString = orderByList.SelectedItem.Value;
         fieldString = searchTextBox.Text;
         string sqlStatement = "SELECT fName,lName,zip,email,cwaSource,price,length FROM SecureOrders WHERE fName LIKE '%" + fieldString + "%' OR lName LIKE'%" + fieldString + "%'  OR zip LIKE'%" + fieldString + "%' OR zip LIKE'%" + fieldString + "%'  OR email LIKE'%" + fieldString + "%' OR cwaSource LIKE'%" + fieldString + "%' OR length LIKE'%" + fieldString + "%' OR price LIKE'%" + fieldString + "%' ORDER BY " + orderByString;
            ////////////////////////////


            System.Configuration.Configuration rootWebConfig = System.Web.Configuration.WebConfigurationManager.
                OpenWebConfiguration("/Cabot3");
            System.Configuration.ConnectionStringSettings connectionString;

            connectionString = rootWebConfig.ConnectionStrings.ConnectionStrings["secureodb"];

        //TEST
            for (int i = 0; i < DefaultGrid.Rows.Count; i++)
            {
                CheckBox chkUpdate = (CheckBox)DefaultGrid.Rows[i].Cells[1].FindControl("CheckBoxProcess");
                if (chkUpdate != null)
                {
                    OrderBrowser.Text += "Test";
                }
            }



            // Create an SqlConnection to the database.
            using (SqlConnection connection = new SqlConnection(connectionString.ToString()))
            {
                connection.Open();
                SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlStatement, connection);


                // create an SqlCommandBuilder - this will automatically generate the
                // commands, and set the appropriate properties in the dataAdapter
                SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

                // create the DataSet
                DataSet dataSet = new DataSet();
                // fill the DataSet using our DataAdapter

                dataAdapter.Fill(dataSet, "SecureOrders");


                SqlCommand cmd = new SqlCommand("SELECT * FROM SecureOrders", connection);  // might not need this
                SqlCommand bitCmd = new SqlCommand("Select IsNull(processed,0) as processedField From SecureOrders", connection);
                DataView source = new DataView(dataSet.Tables[0]);
                DefaultGrid.DataSource = source;
                DefaultGrid.DataBind();
            }


         }

    protected void DefaultGrid_SelectedIndexChanged(Object sender, EventArgs e)
    {
        GridViewRow row = DefaultGrid.SelectedRow;
        string name = "Name: " + row.Cells[2].Text + " " + row.Cells[3].Text + "\r\n";
       // if (row.Cells[4].Text == "&nbsp;")
        //{
            //address = "Address: " + row.Cells[3].Text + "\r\n         " + row.Cells[5].Text + ", " + row.Cells[6].Text + " " + row.Cells[7].Text + " " + row.Cells[8].Text + "\r\n";

       // }
        //else
       // {
           // address = "Address: " + row.Cells[3].Text + "\r\n         " + row.Cells[4].Text + "\r\n         " + row.Cells[5].Text + ", " + row.Cells[6].Text + " " + row.Cells[7].Text + " " + row.Cells[8].Text + "\r\n";
        //}

        string zip = "Zip: " + row.Cells[4].Text + "\r\n";
        string email = "Email: " + row.Cells[5].Text + "\r\n";
        //string phone = "Phone: " + row.Cells[10].Text + "\r\n";
        //string cctype = "Credit Card Type: " + row.Cells[11].Text + "\r\n";
        //string ccnum = "Credit Card Number: " + row.Cells[12].Text + "\r\n";
        //string ccexp = "Credit Card Expiration: " + row.Cells[13].Text + "\r\n";
        string length = "Length: " + row.Cells[8].Text + "\r\n";
        //string delivery = "Delivery: " + row.Cells[15].Text + "\r\n";
        string price = "Price: " + row.Cells[7].Text + "\r\n";
        string source = "Source: " + row.Cells[6].Text + "\r\n";
        //string joined = "Joined: " + row.Cells[18].Text + "\r\n";
        //string url = "URL: " + row.Cells[19].Text + "\r\n";

        OrderBrowser.Text = name + email + length + price + source;
    }

    protected void CheckBoxProcess_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox cb = (CheckBox)sender;
        GridViewRow gr = (GridViewRow)cb.NamingContainer;
        if (cb.Checked)
        {
            OrderBrowser.Text = "checked";
        }
        else
        {
            OrderBrowser.Text = "unchecked";
        }

    }

    }

.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="vieworders.aspx.cs" Inherits="Cabot3.custserv.vieworders" %>

        <asp:DropDownList runat="server" ID="orderByList" AutoPostBack="true">
            <asp:ListItem Value="fName" Selected="True">First Name</asp:ListItem>
            <asp:ListItem Value="lName">Last Name</asp:ListItem>
            <asp:ListItem Value="state">State</asp:ListItem>
            <asp:ListItem Value="zip">Zip Code</asp:ListItem>
            <asp:ListItem Value="cwaSource">Source</asp:ListItem>
            <asp:ListItem Value="cwaJoined">Date Joined</asp:ListItem>
        </asp:DropDownList>
    </div>
    <div>
        <asp:Label runat="server" ID="searchLabel" Text="Search For: " />
        <asp:TextBox ID="searchTextBox" runat="server" Columns="30" />
        <asp:Button ID="searchButton" runat="server" Text="Search" />
    </div>
<div>
<asp:UpdatePanel ID = "up" runat="server">



    <ContentTemplate>
    <div style= "overflow:auto; height:150px; width:700px">
    <asp:GridView ID="DefaultGrid" runat = "server" DataKeyNames = "fName, lName, zip"
    onselectedindexchanged = "DefaultGrid_SelectedIndexChanged"
    autogenerateselectbutton = "true"
    selectedindex="0">
    <SelectedRowStyle BackColor="Azure"
    forecolor="Black"
    font-bold="true" />
    <Columns>
    <asp:TemplateField HeaderText="Processed">
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBoxProcess" OnCheckedChanged="CheckBoxProcess_CheckedChanged"  runat="server" Enabled="true" />
                </ItemTemplate>
            </asp:TemplateField>
    </Columns>
    </asp:GridView>
    </div>
    </div>
    <asp:TextBox ID="OrderBrowser" columns="70" Rows="14" runat="server" Wrap="false" TextMode="MultiLine" ReadOnly = "true"/>
    </ContentTemplate>
    </asp:UpdatePanel>



</div>
</form>

1 Ответ

1 голос
/ 11 июля 2011

Это потому, что когда вы устанавливаете флажок, во время обратной передачи AJAX ваше событие page_load срабатывает до CheckBoxProcess_CheckedChanged, где ваше Gridview снова связывается.

Это должно быть похоже на ...

If(!IsPostBack)  // you missed this condition
{
   orderByString = orderByList.SelectedItem.Value;
     fieldString = searchTextBox.Text;
     string sqlStatement = "SELECT fName,lName,zip,email,cwaSource,price,length FROM SecureOrders WHERE fName LIKE '%" + fieldString + "%' OR lName LIKE'%" + fieldString + "%'  OR zip LIKE'%" + fieldString + "%' OR zip LIKE'%" + fieldString + "%'  OR email LIKE'%" + fieldString + "%' OR cwaSource LIKE'%" + fieldString + "%' OR length LIKE'%" + fieldString + "%' OR price LIKE'%" + fieldString + "%' ORDER BY " + orderByString;
        ////////////////////////////


        System.Configuration.Configuration rootWebConfig = System.Web.Configuration.WebConfigurationManager.
            OpenWebConfiguration("/Cabot3");
        System.Configuration.ConnectionStringSettings connectionString;

        connectionString = rootWebConfig.ConnectionStrings.ConnectionStrings["secureodb"];

    //TEST
        for (int i = 0; i < DefaultGrid.Rows.Count; i++)
        {
            CheckBox chkUpdate = (CheckBox)DefaultGrid.Rows[i].Cells[1].FindControl("CheckBoxProcess");
            if (chkUpdate != null)
            {
                OrderBrowser.Text += "Test";
            }
        }



        // Create an SqlConnection to the database.
        using (SqlConnection connection = new SqlConnection(connectionString.ToString()))
        {
            connection.Open();
            SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlStatement, connection);


            // create an SqlCommandBuilder - this will automatically generate the
            // commands, and set the appropriate properties in the dataAdapter
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

            // create the DataSet
            DataSet dataSet = new DataSet();
            // fill the DataSet using our DataAdapter

            dataAdapter.Fill(dataSet, "SecureOrders");


            SqlCommand cmd = new SqlCommand("SELECT * FROM SecureOrders", connection);  // might not need this
            SqlCommand bitCmd = new SqlCommand("Select IsNull(processed,0) as processedField From SecureOrders", connection);
            DataView source = new DataView(dataSet.Tables[0]);
            DefaultGrid.DataSource = source;
            DefaultGrid.DataBind();
        }
}

Редактировать: После того, как вы прокомментируете ваши комментарии, вам не нужно повторять строки в сетке для установки состояния флажка,Вы можете использовать событие RowDataBound объекта GridView или напрямую связать значение.например,

<asp:CheckBox ID="CheckBoxProcess" Checked='<%#Eval("processedField") %>' OnCheckedChanged="CheckBoxProcess_CheckedChanged"  runat="server" Enabled="true" />

Обновление: Пожалуйста, измените следующий код с этим

 // Create an SqlConnection to the database.
        using (SqlConnection connection = new SqlConnection(connectionString.ToString()))
        {
            connection.Open();                

            SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT * FROM SecureOrders", connection);

            // create the DataSet
            DataSet dataSet = new DataSet();
            // fill the DataSet using our DataAdapter               
            dataAdapter.Fill(dataSet, "SecureOrders");

            DataView source = new DataView(dataSet.Tables[0]);
            DefaultGrid.DataSource = source;
            DefaultGrid.DataBind();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...