2011-04-13 160 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