2014-12-18 14 views
-3

페이지가 처음로드 될 때 TextBox1과 Button 만 있습니다. 상자에 아무 것도 입력하지 않고 버튼을 누르면 SQL Select의 모든 Data 행과 함께 GridView가로드됩니다. Q - 페이지를 처음로드 할 때 자체에서 수행 할 것입니다 (모든 행로드).GridView의 PageLoad

이 검색 기능은 YouTube 동영상에서 찾았으며 필요한 정보를 정확하게 제공합니다. 내가 말했듯이, ASP에 새로운 브랜드가 필요하다면, 알려주고 변경할 수 있습니다.

GridView1 :

<asp:TextBox ID="TextBox1" runat="server" Width="265px" Height="22px" CssClass="myBox"></asp:TextBox> 
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Search Fields" CssClass="myButton" /> 
<asp:GridView ID="GridView1" OnPageIndexChanging="GridView1_PageIndexChanging" OnSorting="GridView1_Sorting" runat="server" AutoGenerateColumns="true" CellPadding="4" EnableModelValidation="True" EnableTheming="True" ForeColor="#333333" GridLines="None" Width="100%" style="margin-top: 0px; text-align: center;" AllowPaging="True" AllowSorting="True" > 
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
    <EditRowStyle BackColor="#999999" /> 
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
</asp:GridView> 

코드 뒤에 (DB 이름과 암호 반출) :

SqlConnection vid = new SqlConnection("Data Source=ENF;Initial Catalog=***Database Name***;Persist Security Info=True;User ID=sa;Password=***Password***"); 
protected void Page_Load(object sender, EventArgs e) 
{ 

} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    String str = "SELECT ab.NAME as [Customer] ,ISNULL(ab.TELEPHONE1,'') as [Phone #] ,ISNULL(pb.NAME,'') as [Product] ,ISNULL(aeb.NEW_PRODUCTVERSION,'') as [Version] ,CASE WHEN ab.STATUSCODE = 1 THEN 'Active' ELSE 'Inactive' END as [Status] ,ISNULL('Sal : ' + c.SALUTATION + '/','') + ISNULL('Title : ' + c.JOBTITLE + '/','') + ISNULL(a.PRIMARYCONTACTIDNAME,'') as [Primary Contact] ,ISNULL(c.TELEPHONE1,'') as [Contact Phone] FROM ACCOUNTBASE ab LEFT JOIN ACCOUNTEXTENSIONBASE aeb on ab.ACCOUNTID = aeb.ACCOUNTID LEFT JOIN PRODUCTBASE pb on aeb.NEW_PRIMARYPRODUCTID = pb.PRODUCTID LEFT JOIN ACCOUNT a on ab.ACCOUNTID = a.ACCOUNTID LEFT JOIN CONTACT c on a.PRIMARYCONTACTID = c.CONTACTID WHERE ((ab.NAME LIKE '%' + @search + '%') OR (aeb.NEW_PRODUCTVERSION LIKE '%' + @search + '%') OR (pb.NAME LIKE '%' + @search + '%') OR (a.PRIMARYCONTACTIDNAME LIKE '%' + @search + '%')) ORDER BY ab.NAME"; 
    SqlCommand xp = new SqlCommand(str, vid); 
    xp.Parameters.Add("@search", SqlDbType.NVarChar).Value = TextBox1.Text; 

    vid.Open(); 
    xp.ExecuteNonQuery(); 
    SqlDataAdapter da = new SqlDataAdapter(); 
    da.SelectCommand = xp; 
    DataSet ds = new DataSet(); 
    da.Fill(ds, "Name"); 
    GridView1.DataSource = ds; 
    GridView1.DataBind(); 

    vid.Close(); 
} 

답변

2

당신이있는 거 문제는 너무 많은 질문을되는 특정하지 않습니다. 그러나, PageLoad의 문제에 대한 ...

당신은 새로운 방법으로 데이터베이스 호출을 이동하고있는 GridViews 데이터 소스를 설정하고를 Page_Load 이벤트에 데이터 바인딩() 메소드를 호출 할 수 있습니다 .. 뭔가 같은 :

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     GridView1.DataSource = GetData(); 
     GridView1.DataBind(); 
    } 

} 

private DataSet GetData() 
{ 
    String str = "SELECT ab.NAME as [Customer] ,ISNULL(ab.TELEPHONE1,'') as [Phone #] ,ISNULL(pb.NAME,'') as [Product] ,ISNULL(aeb.NEW_PRODUCTVERSION,'') as [Version] ,CASE WHEN ab.STATUSCODE = 1 THEN 'Active' ELSE 'Inactive' END as [Status] ,ISNULL('Sal : ' + c.SALUTATION + '/','') + ISNULL('Title : ' + c.JOBTITLE + '/','') + ISNULL(a.PRIMARYCONTACTIDNAME,'') as [Primary Contact] ,ISNULL(c.TELEPHONE1,'') as [Contact Phone] FROM ACCOUNTBASE ab LEFT JOIN ACCOUNTEXTENSIONBASE aeb on ab.ACCOUNTID = aeb.ACCOUNTID LEFT JOIN PRODUCTBASE pb on aeb.NEW_PRIMARYPRODUCTID = pb.PRODUCTID LEFT JOIN ACCOUNT a on ab.ACCOUNTID = a.ACCOUNTID LEFT JOIN CONTACT c on a.PRIMARYCONTACTID = c.CONTACTID WHERE ((ab.NAME LIKE '%' + @search + '%') OR (aeb.NEW_PRODUCTVERSION LIKE '%' + @search + '%') OR (pb.NAME LIKE '%' + @search + '%') OR (a.PRIMARYCONTACTIDNAME LIKE '%' + @search + '%')) ORDER BY ab.NAME"; 
    SqlCommand xp = new SqlCommand(str, vid); 
    xp.Parameters.Add("@search", SqlDbType.NVarChar).Value = TextBox1.Text; 

    vid.Open(); 
    xp.ExecuteNonQuery(); 
    SqlDataAdapter da = new SqlDataAdapter(); 
    da.SelectCommand = xp; 
    DataSet ds = new DataSet(); 
    da.Fill(ds, "Name");  
    vid.Close(); 

    return ds; 
} 
+0

이 오류가 발생합니다. 컴파일 오류 설명 :이 요청을 처리하는 데 필요한 리소스를 컴파일하는 동안 오류가 발생했습니다. 다음 특정 오류 정보를 검토하고 소스 코드를 적절히 수정하십시오. 컴파일러 오류 메시지 : CS0161 : '_Default.GetData()': 모든 코드 경로가 값을 반환하지 않습니다. – JohnZ

+0

개인 DataTable GetData() - 라인이 고휘도 빨간색입니다. – JohnZ

+0

죄송 합니다만 실수로 시도해보십시오. – Dan