Получать данные из нескольких столбцов и отображать в одном столбце - PullRequest
2 голосов
/ 06 января 2012

Я использую VS2005 C # и SQL2005.

Я хотел бы получить данные из нескольких столбцов и объединить их, разделяя их запятой.

например. Данные в моей таблице SQL UserData :

No. | Username | Role 1 | Role 2 | Role 3 |

1 | Jimmy | USER | READONLY | WRITE |

Данные, которые я хотел бы отобразить в моем GridView GridView1 :

No. | Username | Roles |

1 | Jimmy | USER, READONLY, WRITE |

Как я могу использовать оператор SELECT для объединения данных из 3 столбцов и их объединения, разделяя данные запятыми и перечисляя их в GridView?

Спасибо


EDIT

Я пытался использовать метод, предоставленный Shark и Mun, но я хотел бы удалить запятые, если данные в столбце Role пусты.

Ситуация теперь такова, что столбец Roles будет выглядеть следующим образом, если Роль 2 и Роль 3 пусты: USER,,

Могу ли я узнать, как можно сгруппировать , в переменную, чтобы она не отображалась, если значение пустое?

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Вы должны сделать это в хранимой процедуре, а затем привязать GridView к этой хранимой процедуре:

SELECT No., Username, CAST(Role1 AS varchar(1024)+ ', ' + Role2 + ', ' + Role3)
1 голос
/ 06 января 2012

Вот запрос SQL:

select
    username,
    isnull(nullif([role 1], '') + ', ', '') + 
    isnull(nullif([role 2], '') + ', ', '') + 
    isnull(nullif([role 3], ''), '') as Roles
from UserData

А потом для вашей сетки вид кода:

SqlConnection conn = new SqlConnection(YourConnectionStringHere);
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = 
    "select " +
    "    username, " +
    "    isnull(nullif([role 1], '') + ', ', '') + " +
    "    isnull(nullif([role 2], '') + ', ', '') + " +
    "    isnull(nullif([role 3], ''), '') as Roles " +
    "from UserData";

SqlDataAdapter sda = new SqlDataAdapter(cmd);
Datatable YourData = new DataTable();

try
{
    sda.Fill(YourData);

    GridView1.DataSource = YourData;
    GridView1.Bind();
}
catch
{
    sda.Dispose();
    // handle your error
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...