2011-04-13 114 views
0

我的下面的代码不能正常工作......代码是关于何时用户检查附加了网格视图的复选框,该信息应该触发到表,并且一旦数据发送到数据库并根据条件创建两个视图,如果复选框被选中或不选中,并且视图的结果应显示在标签框中。(在ASP.NET中使用C#和DB-MSSQL)gridView中的复选框

CREATE TABLE yourBaseTable 
    (
    ID INT IDENTITY(1, 1) 
     PRIMARY KEY , 
    Payload NVARCHAR(255) NOT NULL , 
    Discriminator TINYINT NOT NULL 
       CHECK (Discriminator IN (0, 1)) 
       DEFAULT (0) 
) ; 
GO 

CREATE VIEW yourView1 
AS 
    SELECT ID , 
     Payload , 
     Discriminator 
    FROM yourBaseTable 
    WHERE Discriminator = 0 ; 
GO 

CREATE VIEW yourView2 
AS 
    SELECT ID , 
     Payload , 
     Discriminator 
    FROM yourBaseTable 
    WHERE Discriminator = 1 ; 
GO 

我也收到了前端问题

以下是方法'checkBox_checkedChange'的描述..我没有得到一行代码

点击CheckBox CheckBox_CheckedChanged事件被触发。我们需要实现这个方法来捕获复选框被选中的行。

protected void CheckBox1_CheckedChanged(object sender, EventArgs e) { 

ClearCheckBoxes(); 

CheckBox checkbox = (CheckBox)sender; 

checkbox.Checked = true; 

GridViewRow row = (GridViewRow)checkbox.NamingContainer; // WHAT DOES THIS CODE MEANS .. 

DisplayMessage(row.Cells[1].Text); 

} 
+0

尝试格式化你的代码。 ('编辑'后,选择代码,并使用'{}'按钮。) – harpo 2011-04-13 17:04:54

回答

2

我不清楚你在第一部分要问什么。至于底部的问题:

GridViewRow row = (GridViewRow)checkbox.NamingContainer;//WHAT DOES THIS CODE MEANS .. 

的“.NamingContainer”将获得包含您的复选框的对象,在这种情况下,您的复选框是一个GridViewRow内。你仍然需要将对象转换为GridViewRow,这是“(GridViewRow)”的目的。您正在将其分配给本地变量行,以便您可以继续使用它。

+0

第一部分的描述在上面给出...代码是它的后端...数据库和表...确定忘记它...我的问题是,我正在使用一个GridView和复选框在其中..只要用户选中复选框,这个信息应该移动到数据库和关于复选框没有被选中的信息应该显示在前端(标签框) – user635545 2011-04-14 08:58:32

0

好的,我从来没有通过SQL处理视图。我通过查询处理意见。这是我如何处理这个问题的一个例子。我认为它符合你的要求。这是我完整的代码。你应该可以复制粘贴来查看它运行的情况,除了我使用linq to sql之外。您可能需要将我的查询转换为SQL,但我强烈推荐Linq-to-SQL。与它合作非常容易。

aspx页面:

<form id="form1" runat="server"> 
<div> 
    <asp:GridView ID="grdSelected" runat="server" AutoGenerateColumns="False" EnableModelValidation="True" HeaderStyle-BackColor="#1B940A"> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:Label ID="lblCheckedID" runat="server" Text='<%# Bind("ID") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkSelected" runat="server" Checked='<%# Bind("Discriminator") %>' 
         OnCheckedChanged="chkSelected_CheckedChanged" AutoPostBack="true" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Payload") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

    <asp:GridView ID="grdNotSelected" runat="server" AutoGenerateColumns="False" EnableModelValidation="True" HeaderStyle-BackColor="#84090C"> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:Label ID="lblCheckedId" runat="server" Text='<%# Bind("ID") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkNotSelected" runat="server" Checked='<%# Bind("Discriminator") %>' 
         OnCheckedChanged="chkSelected_CheckedChanged" AutoPostBack="true" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Payload") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
</div> 
</form> 

后面的代码:

public partial class _Default : System.Web.UI.Page 
{ 
    SampleConnectionClassDataContext sampleContext = new SampleConnectionClassDataContext(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      BindCheckedGrid(); 
      BindNonCheckedGrid(); 
     } 
    } 

    private void BindCheckedGrid() 
    { 
     var checkedItems = from check in sampleContext.CheckboxSamples 
          where check.Discriminator == true 
          select check; 

     grdSelected.DataSource = checkedItems; 
     grdSelected.DataBind(); 
    } 

    private void BindNonCheckedGrid() 
    { 
     var checkedItems = from check in sampleContext.CheckboxSamples 
          where check.Discriminator == false 
          select check; 

     grdNotSelected.DataSource = checkedItems; 
     grdNotSelected.DataBind(); 
    } 


    protected void chkSelected_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox checkbox = (CheckBox)sender; 
     GridViewRow row = (GridViewRow)checkbox.NamingContainer; 
     Label lblID = (Label)row.FindControl("lblCheckedID"); 

     var existingEntry = from s in sampleContext.CheckboxSamples 
          where s.ID == int.Parse(lblID.Text) 
          select s; 

     existingEntry.First().Discriminator = checkbox.Checked; 
     sampleContext.SubmitChanges(); 

     BindCheckedGrid(); 
     BindNonCheckedGrid(); 

    } 
} 

希望这有助于:-)

+0

如果他们回答您的问题,请接受答案。你有7个问题,没有人接受。快乐发展:-) – Starwfanatic 2011-04-18 21:03:23

+0

我已经接受了答案,但这次我没有得到正确的答案..with复选框和GridView的问题...它已经2周了,但我仍然努力与我的答案:-) – user635545 2011-04-19 12:26:32