2009-08-07 5 views
1

이 코드를 사용하면 Oracle 데이터베이스에서 테이블 이름을 검색 할 수 있습니다. 행을 선택하면 선택한 테이블의 모든 열이 두 번째 gridview에 놓입니다.마스터 세부 Gridview에있는 여러 DataKeyNames

하나의 DatakeyName - "Table_Name"만 사용하면 아래 코드가 작동하지만 내가 원하는 것이 아닌 다른 소유자와 동일한 테이블 이름을 표시합니다. Table_Name과 Owner의 두 필드를 기반으로 세부 정보를 가져 오려고합니다.

2 개의 datakeyNames를 사용하여 세부 정보 부분을 가져 오는 방법을 알 수 없습니다.

<asp:Label ID="lblTitleSrchOracleTab" runat="server" Text="Search For A Table In Oracle"></asp:Label> 
     <br /><br /> 
     <asp:Label ID="lblOracleTableName" runat="server" Text="Oracle Table Name"></asp:Label> 
     <asp:TextBox ID="txtOracleTableName" runat="server"></asp:TextBox> 
     <asp:Button ID="btnOracleTableName" runat="server" Text="Search" 
      /> 
     <br /><br /> 
    <asp:GridView ID="gvOracleTableName" runat="server" CssClass="mGrid" 
      AutoGenerateSelectButton="True" AutoGenerateColumns="False" 
       DataSourceID="sdsOracleTableName" DataKeyNames="Owner,Table_Name" > 
      <Columns> 
       <asp:BoundField DataField="OWNER" HeaderText="OWNER" SortExpression="OWNER" /> 
       <asp:BoundField DataField="TABLE_NAME" HeaderText="TABLE_NAME" 
        SortExpression="TABLE_NAME" /> 
       <asp:BoundField DataField="NUM_ROWS" HeaderText="NUM_ROWS" 
        SortExpression="NUM_ROWS" /> 
       <asp:BoundField DataField="TABLESPACE_NAME" HeaderText="TABLESPACE_NAME" 
        SortExpression="TABLESPACE_NAME" /> 
      </Columns> 
     </asp:GridView> 
     <asp:SqlDataSource ID="sdsOracleTableName" runat="server" 
      ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
      ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT Owner, Table_name, Num_Rows, Tablespace_name 
    FROM all_tables 
    WHERE trim(upper(table_name)) LIKE trim(upper('%' || :TableName || '%'))"> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="txtOracleTableName" Name="TableName" 
        PropertyName="Text" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 
     <br /><br /> 
     <asp:GridView ID="gvSelectedTableColumns" runat="server" CssClass="mGrid" 
      AutoGenerateColumns="False" DataSourceID="sdsgvSelectedTableColumns"> 
      <Columns> 
       <asp:BoundField DataField="OWNER" HeaderText="OWNER" SortExpression="OWNER" /> 
       <asp:BoundField DataField="TABLE_NAME" HeaderText="TABLE_NAME" 
        SortExpression="TABLE_NAME" /> 
       <asp:BoundField DataField="COLUMN_NAME" HeaderText="COLUMN_NAME" 
        SortExpression="COLUMN_NAME" /> 
       <asp:BoundField DataField="DATA_TYPE" HeaderText="DATA_TYPE" 
        SortExpression="DATA_TYPE" /> 
       <asp:BoundField DataField="DATA_LENGTH" HeaderText="DATA_LENGTH" 
        SortExpression="DATA_LENGTH" /> 
       <asp:BoundField DataField="NULLABLE" HeaderText="NULLABLE" 
        SortExpression="NULLABLE" /> 
      </Columns> 
      <SelectedRowStyle BorderColor="Red" Font-Bold="True" /> 
     </asp:GridView> 
     <asp:SqlDataSource ID="sdsgvSelectedTableColumns" runat="server" 
      ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 


      ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT Owner, table_name, column_name, Data_Type, Data_Length, Nullable 
    FROM all_tab_columns 
    WHERE trim(upper(Owner)) =trim(upper(:SelectedOwner)) AND 
    trim(upper(table_name)) =trim(upper(:SelectedTableName)) 
    "> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="gvOracleTableName" Name="SelectedOwner" 
        PropertyName="SelectedValue" /> 
       <asp:ControlParameter ControlID="gvOracleTableName" DefaultValue="" 
        Name="SelectedTableName" PropertyName="SelectedValue" /> 
      </SelectParameters> 
     </asp:SqlDataSource> 

답변

0

나는 마침내 이것을 알아 낸 것입니다. Mighty Mouse는 그것을 할 수 없습니다 - 실제 코드가 필요합니다! 특히 gridview_SelectedIndexChanged 이벤트입니다.

다음은 내가 한 일입니다.

protected void gvOracleTableName_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      string SelectedOwner; 

      SelectedOwner = gvOracleTableName.SelectedRow.Cells[1].Text ; 

      string SelectedTableName; 
      SelectedTableName = gvOracleTableName.SelectedRow.Cells[2].Text; 

      lblTest.Text = SelectedOwner + " " + SelectedTableName; 





      string strConn, strSQL; 
      strConn = @""; 
      strSQL = @"SELECT Owner, table_name, column_name, Data_Type, Data_Length, Nullable FROM all_tab_columns WHERE trim(upper(Owner)) =trim(upper(:SelectedOwner)) AND trim(upper(table_name)) =trim(upper(:SelectedTableName))"; 
      using (OracleConnection cn = new OracleConnection(strConn)) 
      { 
       OracleCommand cmd = new OracleCommand(strSQL, cn); 

       cmd.Parameters.AddWithValue(":SelectedOwner", SelectedOwner); 
       cmd.Parameters.AddWithValue(":SelectedTableName", SelectedTableName); 

       cn.Open(); 

       OracleDataReader rdr = cmd.ExecuteReader(); 

       gvSelectedTableColumns.DataSource = rdr; 
       gvSelectedTableColumns.DataBind(); 

       cn.Close(); 
      } 

     } 
0

where 절을 확장 할 수 없습니까?

그래서

from all_tables where ... and owner = 'MYOWNER' 

또는이

WHERE trim(upper(Owner)) =trim(upper(:SelectedOwner)) AND 
trim(upper(table_name)) =trim(upper(:SelectedTableName)) 

내 문제가 무엇인지입니다

select from user_tables instead of all_tables. 
0

당신이 GridView 컨트롤에 paramters를 연결 SqlDataSource와 마법사를 사용하는 경우, 그것을 바인딩 할 수있는 gridview 어떤 데이터 키를 선택할 수 없습니다.

관련 문제