每当选中或取消选中复选框时,我都会尝试写入数据库。如果选中复选框,我们希望能够存储1(位值),如果不是,则希望存储0。这样,如果已经检查过,当表单加载时,我们会在复选框中看到一个检查。否则,就没有一个。以下是我到目前为止的情况:
C#
public partial class vieworders : System.Web.UI.Page
{
private string orderByString;
private string fieldString;
private string address;
private DataGrid dataGrid = new DataGrid();
SqlDataAdapter dataAdapter;
DataSet dataSet;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
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;
////////////////////////////
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.
// Create an SqlConnection to the database.
using (SqlConnection connection = new SqlConnection(connectionString.ToString()))
{
connection.Open();
dataAdapter = new SqlDataAdapter("SELECT * FROM SecureOrders", connection);
// create the 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();
connection.Close();
}
}
}
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 == " ")
//{
//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;
connectionString = rootWebConfig.ConnectionStrings.ConnectionStrings["secureodb"];
using (SqlConnection connection = new SqlConnection(connectionString.ToString()))
{
connection.Open();
dataAdapter = new SqlDataAdapter("SELECT * FROM SecureOrders", connection);
// create the DataSet
dataSet = new DataSet();
// fill the DataSet using our DataAdapter
dataAdapter.Fill(dataSet, "SecureOrders");
DataSet myDSchanged = dataSet.GetChanges(DataRowState.Modified);
SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter);
dataAdapter.Update(myDSchanged, "SecureOrders");
dataSet.AcceptChanges();
connection.Close();
}
}
}
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" AutoPostBack = "true" Checked ='<%#Eval("processed") %>' 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>
有人能引导我朝着正确的方向前进吗?
答案 0 :(得分:1)
这是我作为帮助方法编写的静态方法。它采用布尔值,并在列中设置0或1位值。您当然需要使用您的表名,列名等来修改它。我刚刚创建了一个简单的测试数据库来向您展示如何执行此操作。
现在,假设该行已存在于数据库中。在我的测试数据库中,我的表名为“设置”,有三列:
已存在ID为0的行,名称为“CheckboxState”且值为0.因此,最初您应该使用某种机制将行放在数据库中。
但是,基本上,你可以在代码隐藏中调用它,并将CheckBox.Checked属性传递给它。
static void UpdateCheckedState(bool state) {
string connectionstring = "<yourconnectionstring>";
using (SqlConnection connection = new SqlConnection(connectionstring)) {
try {
connection.Open();
}
catch (System.Data.SqlClient.SqlException ex) {
// Handle exception
}
string updateCommandText = "UPDATE Settings SET Value = @state WHERE Name = 'CheckboxState'";
using (SqlCommand updateCommand = new SqlCommand(updateCommandText, connection)) {
SqlParameter stateParameter = new SqlParameter("state", state);
updateCommand.Parameters.Add(stateParameter);
try {
updateCommand.ExecuteNonQuery();
}
catch (System.Data.SqlClient.SqlException ex) {
// Handle exception
}
}
}
}